我做到了这一点:
>>> 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()
答案 0 :(得分:0)
你没有安装任何其他HTML解析器而不是Python中的默认解析器(实际上并不是很好)。
pip install lxml
并重新加载所有内容,BeautifulSoup将自动获取lxml并使用它来解析HTML。这对我来说很有用,没有引号重写(这表明事情正在发生)。
(HTML可能会以某种奇怪的方式被破坏,而Python的HTML解析器在理解那种东西方面并不是很好,即使有了bs4的帮助。)