簡體   English   中英

BeautifulSoup soup.prettify()給出了奇怪的輸出

[英]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   "   &gt;   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   "   &gt;   /   t   d   &gt;   \n           /   t   r   &gt;   \n           t   r   &gt;   \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   "   &gt;   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   "   &gt;   /   t   d   &gt;   \n           /   t   r   &gt;   \n   /   t   a   b   l   e   &gt;   \n   /   c   e   n   t   e   r   &gt;   /   d   i   v   &gt;   \n   \n   p   &gt;   &amp;n   b   s   p   ;   &amp;n   b   s   p   ;   &amp;n   b   s   p   ;   &amp;n   b   s   p   ;   /   p   &gt;   \n   /   b   o   d   y   &gt;   \n   /   h   t   m   l   &gt;\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')更好地處理; 例如,當文本內容中存在未屏蔽的<字符(而不是&lt; )時就是這種情況。

這看起來就像你的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM