BeautifulSoup - 不是预期的输出

时间:2013-03-16 12:02:24

标签: python beautifulsoup

我做到了这一点:

>>> from bs4 import BeautifulSoup; import urllib2
>>> data = urllib2.urlopen('http://api.stackexchange.com/docs/').read()
>>> soup = BeautifulSoup(data.replace('""','"')) # there are errors on page
>>> soup.prettify()
<!DOCTYPE HTML>
<html lang="en">
............... # cut short
</html>

data似乎没问题,正如预期的那样。问题出在soup的输出上。

soup.prettify()未输出包含数据中所有内容的字符串。似乎soup没有解析整个字符串(或者它做什么)。

如果您检查网页的来源和soup.prettify()的输出,您会发现它们不匹配..
这里发生了什么,为什么?

我有一种感觉我在这篇文章中不太清楚,如果有的话请评论。我会试着详细说明。否则,请随意删除这句话......


更新
在回复FakeRainBrigand的评论时,我想说即使使用浏览器保存html,问题仍然存在......所以,即使这也有同样的问题:

 data = open('Stack Exchange API.htm').read()

1 个答案:

答案 0 :(得分:0)

你没有安装任何其他HTML解析器而不是Python中的默认解析器(实际上并不是很好)。

pip install lxml

并重新加载所有内容,BeautifulSoup将自动获取lxml并使用它来解析HTML。这对我来说很有用,没有引号重写(这表明事情正在发生)。

(HTML可能会以某种奇怪的方式被破坏,而Python的HTML解析器在理解那种东西方面并不是很好,即使有了bs4的帮助。)