如何构建一个能从任何网站提取特定信息的网络爬虫?

4 投票
3 回答
5238 浏览
提问于 2025-04-16 18:24

我正在尝试建立一个网络爬虫,想要在任何评论网站上都能比较可靠地抓取用户评论。也就是说,我不想为像亚马逊和Overstock这样的特定网站分别写一个爬虫,而是想要一个可以同时抓取这两个网站上产品评论的爬虫,哪怕准确性稍微牺牲一点。之前我和我的一位教授聊过,他提到我可以简单地使用一些启发式的方法来收集数据(比如说,直接抓取所有

标签中的文本)。现在,我主要是想要一些建议,看看该往哪个方向发展。

(如果这有帮助的话,目前我在使用Python的mechanize和lxml来爬取各个网站。)

谢谢!

3 个回答

0

有一个关于评论的RDF词汇,还有一个微格式。如果你的评论使用这些格式,就会很容易被解析。

3

在1993年左右,我写了一个爬虫程序,用来从不同的网站提取特定内容。这个程序是根据每个网站定义的一系列“规则”来工作的。

这些规则用一种叫做正则表达式的东西来表示,分为两类:一种是“准备”规则(这些规则会处理获取到的页面,以便更好地识别和提取数据),另一种是“提取”规则(这些规则会直接提取有用的数据)。

举个例子,假设我们有这样一个页面:

<html>
  <head><title>A Page</title></head>
  <body>
  <!-- Other stuff here -->
  <div class="main">
    <ul>
      <li>Datum 1</li>
      <li>Datum 2</li>
    </ul>
  </div>
  <!-- Other stuff here -->
  <div>
    <ul>
      <li>Extraneous 1</li>
      <li>Extraneous 2</li>
    </ul>
  </div>
  <!-- Other stuff here -->
  </body>
</html>

为了提取页面中的“Datum”值,我们可能会用到以下规则:

  1. '^.*?<div class="main">' 去掉开头的部分
  2. '</div>.+</html>$' 去掉结尾的部分
  3. '<li>([^<]+)</li>' 提取出结果

这个方法在大多数网站上都能很好地工作,直到他们改变了页面布局,这时候就需要调整针对那个网站的规则了。

现在的话,我可能会使用Dave Raggett的HTMLTidy来把所有获取到的页面转换成合法的XHTML格式,然后用XPATH/XSLT来处理页面,使其符合正确的格式。

4

这个问题其实没有一个明确的“答案”,但为了帮助那些看到这个问题的人,下面是一些信息:

所谓的“通用”抓取工具,最多也就是个有趣的学术练习。实际上,它很可能无法以任何有用的方式实现。

有两个比较有用的项目可以参考,一个是Scrapy,这是一个用Python写的网页抓取框架;另一个是http://www.nltk.org/,也就是自然语言工具包,它包含了很多与处理自然语言文本相关的Python模块。

撰写回答