BeautifulSoup、Python和HTML自动分页截断?
我正在使用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。