【问题标题】:How do I build a web crawler that can extract particular information from any site?如何构建可以从任何站点提取特定信息的网络爬虫?
【发布时间】:2011-05-26 17:16:53
【问题描述】:

所以我正在尝试构建一个网络爬虫,我可以打开任何评论网站并让它相当可靠地从文本中抓取用户评论。也就是说,我不想为 Amazon 和 Overstocked 构建一个刮板,我只想要一个刮板,即使要牺牲准确性,它也可以从两者中刮掉产品的评论。我与我的一位教授进行了简短的交谈,他提到我基本上可以实现一些启发式并从中收集数据(作为一个基本示例,只需获取 p 标签中的所有文本)。目前,我真的只是在寻找一些关于前进方向的建议。

(如果有任何问题,目前我正在使用 mechanize 和 lxml (Python) 来抓取各个站点。)

谢谢!

【问题讨论】:

  • “基本上只是实现一些启发式”是描述复杂任务的简单语句。虽然这可能是一个有趣的学术练习,但我建议编写模块化爬虫并为每个站点实现自定义爬虫会更容易、更简单和更准确。
  • -1 提出更有针对性的问题。
  • 如果你想尝试,坚持使用 mechanize、lxml 并查看nltk.org 进行文本处理
  • 在任何特定的产品页面上,亚马逊列出了您可能也感兴趣的多种产品。您如何知道评论与页面上显示的所有产品相关?您不能为此制作通用刮板。
  • 谢谢罗伯。我刚刚读到一些声称拥有数百万资源的公司,我的猜测是他们必须有一些非常通用的抓取工具来完成他们的大量工作。并向史蒂夫道歉,但老实说,我什至不知道从哪里开始。谷歌没有发现任何有用的东西。

标签: python web-crawler


【解决方案1】:

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

“通用”刮板的概念充其量只是一个有趣的学术练习。不太可能以任何有用的方式实现。

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

【讨论】:

    【解决方案2】:

    过去(大约 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. 使用'^.*?&lt;div class="main"&gt;'剥离前导部分
    2. 使用'&lt;/div&gt;.+&lt;/html&gt;$'去除尾随部分
    3. 使用'&lt;li&gt;([^&lt;]+)&lt;/li&gt;'提取结果

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 2019-10-26
        • 2013-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多