<b>
标签,当BeautifulSoup看到第二个<b>
标签时,它会立即关闭第一个,而Firefox和Webkit则将<b>
标签嵌套起来。是否有Python(甚至其他语言)的网络爬虫库能够重现Firefox或WebKit生成的解析树(或者至少在存在歧义的情况下比BeautifulSoup更接近)?
<b>
标签,当BeautifulSoup看到第二个<b>
标签时,它会立即关闭第一个,而Firefox和Webkit则将<b>
标签嵌套起来。使用BeautifulSoup
作为html5lib
的解析器:
from html5lib import HTMLParser, treebuilders
parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
text = "a<b>b<b>c"
soup = parser.parse(text)
print soup.prettify()
输出:
<html>
<head>
</head>
<body>
a
<b>
b
<b>
c
</b>
</b>
</body>
</html>
pyWebKitGTK 看起来可能会有所帮助。
此外,这里有一个人不得不做同样的事情,但是在javascript运行后获得内容的导出,使用pyWebKitGTK从Python执行javascript。
在cheeseshop上的pyWebkitGTK。
您也可以使用pyQt来完成这个操作。
你尝试过Scrapy吗?
Scrapy是一个快速的高级屏幕抓取和网络爬虫框架,用于爬行网站并从其页面中提取结构化数据。它可用于广泛的用途,从数据挖掘到监视和自动化测试。
WebKit是开源的,所以如果任何语言都可以接受的话,您可以使用它自己的解析器(在WebCore组件中)。
Ian Bicking曾经写道,令人惊讶的是,lxml在解析网页时可能比BeautifulSoup更好:http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/(仅供参考,个人未尝试过)
你可以在beautifulsoup中使用lxml解析器,并使用xpath在未格式化的html页面中查找数据,当你使用firebug检查元素时,可以复制xpath。
你可以查看这个教程: http://www.youtube.com/watch?v=PgWfF-Ut0zM
ICantBelieveItsBeautifulSoup也是BeautifulSoup的子类。它具有符合HTML标准的启发式规则,但忽略了HTML在实际世界中的使用方式。例如,嵌套<B>标记是有效的HTML,但在现实世界中,嵌套<B>标记几乎总是意味着作者忘记关闭第一个<B>标记。如果您遇到实际嵌套<B>标记的情况,则可以使用ICantBelieveItsBeautifulSoup。