【问题标题】:HTML garbled after using BeautifulSoup使用 BeautifulSoup 后 HTML 出现乱码
【发布时间】:2013-05-28 06:49:31
【问题描述】:

我正在下载一个带有 urllib2 的页面并将其加载到 BeautifulSoup 中:

from bs4 import BeautifulSoup as Soup
import urllib2
baseHTML = 'http://forums.macrumors.com/'
baseForum = 'forumdisplay.php?f=109'
forumHTML = urllib2.urlopen(baseHTML+baseForum).read()
page = Soup(forumHTML)
print forumHTML
print page

打印forumHTML时,一切正常,得到返回的html完全没问题。

但是,当打印page 时,此时 HTML 会出现乱码:

<a href="showthread.php?t=324487" id="thread_title_324487">iPhone Tips and Tricks thread</a>
<span class="smallf">o n t "   s t y l e = " w h i t e - s p a c e 

如您所见,BeautifulSoup 在错误的地方添加了&gt;,原因不明。 这是forumHTML中的相同HTML:

<a href="showthread.php?t=324487" id="thread_title_324487">iPhone Tips and Tricks thread</a>
<span class="smallfont" style="white-space

为什么会发生这种情况?我在 Windows 64 位上使用 python 2.7,如果这很重要的话。

【问题讨论】:

  • 我敢打赌,这是因为 bs4 默认会尝试转义 '&'、'' 等字符(请参阅 docs)。如果你运行print(soup.prettify(formatter=None)),你会看到相同的html吗?
  • 安装html5lib,它应该可以工作。
  • 安装html5lib 和使用prettify 都不起作用 - HTML 仍然是错误的。

标签: python html beautifulsoup urllib2


【解决方案1】:

我在 Google 地方页面上抓取时遇到了类似的问题,没有添加 > 符号,但我在 html 代码中引入的空白处遇到了同样的问题......并且重新安装 BeautifoulSoup 并没有使它工作:)

无论如何,我回到 BeautifulSoup4 文档,阅读了它支持的不同 HTML 解析器,并尝试使用 Python 的 html.parser

from bs4 import BeautifulSoup

...

page = BeautifulSoup(markup, "html.parser")

问题解决了。如果您遇到此问题,您可能需要使用受支持的 HTML 解析器之一。

【讨论】:

    【解决方案2】:

    很久没有找到解决方案,我决定重新安装 BeautifulSoup - 以某种方式解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多