BeautifulSoup、Python和HTML自动分页截断?

1 投票
2 回答
1357 浏览
提问于 2025-04-16 04:06

我正在使用Python和BeautifulSoup来解析HTML页面。不过,不幸的是,对于一些页面(超过40万),BeautifulSoup会截断HTML内容。

我用以下代码来获取一组“div”:

findSet = SoupStrainer('div')
set = BeautifulSoup(htmlSource, parseOnlyThese=findSet)
for it in set:
    print it

在某个时刻,输出看起来像这样:

正确的字符串,正确的字符串,不完整/截断的字符串(“所以,我”)

虽然htmlSource里包含了字符串“所以,我很无聊”,还有很多其他内容。我还想提到,当我使用prettify()来美化树形结构时,我看到的HTML源代码也是被截断的。

你知道我该如何解决这个问题吗?

谢谢!

2 个回答

0

我在这个链接找到了解决这个问题的方法,使用的是BeautifulSoup,觉得比lxml简单多了:beautifulsoup-where-are-you-putting-my-html

你只需要做的就是安装:

pip install html5lib

然后把它作为参数添加到BeautifulSoup里:

soup = BeautifulSoup(html, 'html5lib')
4

试试用 lxml.html 这个库。它是一个更快、更好的 HTML 解析工具,而且比最新的 BeautifulSoup 更能处理那些有问题的 HTML。对于你的示例页面,它工作得很好,可以解析整个页面。

import lxml.html

doc = lxml.html.parse('http://voinici.ceata.org/~sana/test.html')
print len(doc.findall('//div'))

上面的代码返回了 131 个 div。

撰写回答