用Python进行网络抓取

9 投票
10 回答
4703 浏览
提问于 2025-04-15 20:07

我现在正在尝试抓取一个网页,这个网页的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>

撰写回答