用Python进行网络抓取
我现在正在尝试抓取一个网页,这个网页的HTML格式很糟糕(经常缺少结束标签,没有使用类或ID,导致我很难直接找到想要的元素等等)。我一直在使用BeautifulSoup,效果还不错,但偶尔会遇到一些页面,BeautifulSoup生成的HTML结构和Firefox或Webkit的有些不同。虽然这可以理解,因为HTML的格式本身就不太明确,但如果我能得到和Firefox或Webkit一样的解析结构,那我就能更轻松地提取信息了。
问题通常是这样的:网站打开了一个<b>
标签两次,而当BeautifulSoup看到第二个<b>
标签时,它会立即关闭第一个标签,而Firefox和Webkit则会把<b>
标签嵌套在一起。
有没有什么Python的网页抓取库(或者其他语言的库,我现在有点绝望)能生成和Firefox或Webkit一样的解析结构(或者至少在模糊情况下比BeautifulSoup更接近)?
10 个回答
3
你试过 scrapy 吗?
Scrapy 是一个快速的高级网页抓取和爬虫框架,主要用来访问网站并从网页中提取结构化的数据。它可以用于很多不同的目的,比如数据挖掘、监控和自动化测试。
4
pyWebKitGTK 这个东西看起来可能会对你有帮助。
还有一个人也遇到过类似的问题,他需要在JavaScript运行后导出内容,他用pyWebKitGTK从Python执行JavaScript。
你可以在cheeseshop找到关于pyWebkitGTK的更多信息。
你也可以用pyQt来实现这个功能。
10
使用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>