[英]BeautifulSoup soup.prettify() gives strange output
我正在嘗試解析一個網站,我將在稍后的Django項目中使用它。 為此,我使用的是urllib2和BeautifulSoup4。 但是,我無法得到我想要的東西。 BeautifulSoup對象的輸出很奇怪。 我嘗試了不同的頁面,它有效(輸出正常)。 我以為是因為頁面。 然后,當我的朋友試圖做同樣的事情時,他得到了正常的輸出。 我無法弄清楚問題。
這是我要解析的網站 。
這是命令“soup.prettify()”之后的奇怪輸出的示例:
t d B G C O L O R = " # 9 9 0 4 0 4 " w i d t h = " 3 " > i m g S R C = " 1 p . g i f " A L T B O R D E R = " 0 " h e i g h t = " 1 " w i d t h = " 3 " > / t d > \n / t r > \n t r > \n t d c o l s p a n = " 3 " B G C O L O R = " # 9 9 0 4 0 4 " w i d t h = " 6 0 0 " h e i g h t = " 3 " > i m g s r c = " 1 p . g i f " w i d t h = " 6 0 0 " \n h e i g h t = " 1 " > / t d > \n / t r > \n / t a b l e > \n / c e n t e r > / d i v > \n \n p > &n b s p ; &n b s p ; &n b s p ; &n b s p ; / p > \n / b o d y > \n / h t m l >\n </p>\n </body>\n</html>'
下面是它為我工作,包括您有問題的HTML代碼段小例子。 沒有你的代碼就很難分辨,但我的猜測是你在某處做過像' '.join(A.split())
這樣的事情。
import urllib2, bs4
url = "http://kafemud.bilkent.edu.tr/monu_tr.html"
req = urllib2.urlopen(url)
raw = req.read()
soup = bs4.BeautifulSoup(raw)
print soup.prettify().encode('utf-8')
贈送:
....
<td bgcolor="#990404" width="3">
<img alt="" border="0" src="1p.gif" width="3"/>
</td>
<td bgcolor="#FFFFFF" valign="TOP">
<div align="left">
<table align="left" border="0" cellpadding="10" cellspacing="0" valign="TOP" width="594">
<tr>
<td align="left" valign="top">
<table align="left" border="0" cellpadding="0" cellspacing="0" class="icerik" width="574">
....
可能你和你的朋友使用不同的解析器。 BeautifulSoup將使用它認為“最佳”的解析器,因此出於速度原因(如果已安裝)更喜歡lxml
。 如果使用最新版本的Python(以及包含的解析器的最后一個版本),有些情況可以通過BeautifulSoup(text, 'html.parser')
更好地處理; 例如,當文本內容中存在未屏蔽的<
字符(而不是<
)時就是這種情況。
這看起來就像你的XML帶有一個beautifulsoup不期望的編碼。 我的猜測是你的XML是UTF-16,而beautifulsoup正在讀它為UTF-8。 Python提供.encode和.decode函數,用於在不同編碼之間切換。 就像是
myXmlStr.encode("utf-16").decode("utf-8")
如果問題是您的傳入XML編碼,可能會解決您的問題。 我自己也很喜歡漂亮的湯,但快速谷歌建議如果問題是輸出的編碼,那么美化會接受一個編碼參數:
soup.prettify("utf-16")
如果沒有更多的信息,我無法給你一個更清晰的答案 - 但希望這能為你指明一個有用的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.