1

我已经这样做了:

>>> 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()
4

1 回答 1

0

除了 Python 中的默认解析器之外,您还没有安装任何其他 HTML 解析器(这真的不是很好)。

pip install lxml

并重新加载所有内容,BeautifulSoup 将自动获取 lxml 并使用它来解析 HTML。这对我有用,没有引号重写(这是正在进行中的标志)。

(HTML 可能以某种奇怪的方式被破坏,Python 的 HTML 解析器并不擅长理解这类事情,即使有 bs4 的帮助。)

于 2013-03-16T12:14:45.507 回答