如何构建可从任何站点提取特定信息的Web爬网程序?

时间:2011-05-26 17:16:54

标签: python web-crawler

所以我正在尝试构建一个网络抓取工具,我可以打开任何评论网站,让它可以相当可靠地从文本中抓取用户评论。也就是说,不管是为亚马逊和Overstocked建造一个刮刀,我只想要一个刮刀,即使要牺牲精度,也可以刮掉对它们的产品的评价。我简单地和我的一位教授谈过,他提到我基本上可以实现一些启发式方法并从中收集数据(作为一个基本的例子,只需要获取p标签中的所有文本)。目前,我真的只是想找一些关于前进方向的建议。

(如果重要的是,目前我正在使用mechanize和lxml(Python)来抓取各个网站。)

谢谢!

3 个答案:

答案 0 :(得分:4)

这个问题并没有真正的'答案',但为了遇到这个问题的人的利益:

“通用”刮刀的概念 - 充其量 - 是一项有趣的学术练习。它不太可能以任何有用的方式。

要查看的两个有用项目是Scrapy,一个python web抓取框架和http://www.nltk.org/Natural Language Toolkit,一大堆与er,自然语言处理相关的python模块文本。

答案 1 :(得分: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>

仅提取“基准”值的规则可能是:

  1. 使用'^.*?<div class="main">'
  2. 剥离主要部分
  3. 使用'</div>.+</html>$'
  4. 剥离尾随部分
  5. 使用'<li>([^<]+)</li>'
  6. 提取到结果中

    这对大多数网站都有效,直到他们更改了布局,此时该网站的规则需要调整。

    今天,我可能会使用Dave Raggett的HTMLTidy做同样的事情,将所有检索到的页面规范化为合法的XHTML和XPATH / XSLT,以便将页面按到正确的格式。

答案 2 :(得分:0)

RDF vocabulary for reviews,还有microformat。如果您的评论采用这种格式,则很容易解析。

相关问题