【问题标题】:regular expression: mine text data from other websites正则表达式:从其他网站挖掘文本数据
【发布时间】:2010-10-07 04:40:52
【问题描述】:

我想爬过其他公司的网站,比如汽车网站,并在我的本地数据库中提取只读信息。然后我希望能够在我的网站上显示这些收集到的信息。纯粹从技术角度来看,是否已经有一个 .net 工具、程序等对于我的目的来说足够通用。还是我必须从头开始写?

为了有效地做到这一点,我可能需要一个 WCF 工作,它只是不断地挖掘数据并刷新数据库,然后将数据提供给网站。

另外,有没有办法屏蔽我对这些网站的调用?我会为我的目标网站制造“流量负担”吗?如果我只是无害地抓取它们会影响它们的功能吗?

如何让我的请求看起来像“人”而不是来自 Crawler?

是否有关于如何使用解析 DOM 树的库的代码示例?

我可以通过 WebBrowser 控件向特定站点发送请求并获得关于 DOM 的响应吗?

【问题讨论】:

  • 另外,像 Google 这样的搜索引擎有 API,如果这适用于您的情况,您可以在其中以编程方式获取结果。
  • 有没有关于如何使用这些 API 的示例?

标签: c# asp.net wcf iis


【解决方案1】:

使用HtmlAgilityPack 解析 HTML。然后使用 Windows 服务(不是 WCF)来运行长时间运行的进程。

【讨论】:

    【解决方案2】:

    我不知道您会如何影响目标站点,但产生看起来很人性化的流量的一种绝妙方法是 WinForms 浏览器控件。我已经使用它几次从 Wikipedia 获取内容,因为我使用 HttpWebRequest 执行 HTTP 的正常模式在那里标记了一个非人为过滤器,因此我被阻止了。

    【讨论】:

    • 您能否详细说明“人性化的流量是 WinForms 浏览器控件”?我迷路了……
    • 具体来说,如果您只想要在加载网页时在视图源中看到的 eqiv,您可以使用 System.Net.HttpWebRequest/Response,但有些网站知道“真正的”浏览器在其请求的标头中添加了其他内容(除其他外)。在阻止我之前,维基百科只容忍了一些这样的请求。但是,当我使用 WebBrowser 控件时,我基本上是在以编程方式驱动一个 IE 实例,因此任何类型的检测都必须基于不太确定性更多的定性指标(这是我的想法)。有更清楚的吗?
    【解决方案3】:

    就影响目标站点而言,它完全取决于站点。如果您以足够快的速度抓取 stackoverflow 的次数,他们将禁止您的 ip。如果你对谷歌做同样的事情,他们会开始要求你回答验证码。大多数网站都有速率限制器,因此您只能经常请求请求。

    就从页面中抓取数据而言,永远不要使用被反复提及的正则表达式。您应该使用解析 DOM 树的库,或者根据需要使用自己的库。在我之前的创业公司中,我们处理这个问题的方式是我们编写了一种中间模板语言,它会告诉我们的爬虫数据在页面上的位置,以便我们知道我们正在提取什么数据和什么类型的数据。您会发现最困难的部分是不断变化和变化的数据。一旦解析器开始工作,即使在同一个站点上也需要不断的工作才能让它继续工作。

    【讨论】:

    • 通常网站布局不会发生太大变化,所以我不明白您所说的“一旦解析器工作,即使在同一个站点上也需要不断工作才能让它继续工作。”
    【解决方案4】:

    我使用了一个非常灵活的工具Visual Web Ripper。输出到 Excel、SQL、文本。从相同的输入。

    【讨论】:

      【解决方案5】:

      没有通用工具可以为您从 Web 中提取数据。这不是一个简单的操作。一般来说,抓取页面并不难。但是剥离/提取您需要的内容很困难。此操作必须针对每个网站进行定制。

      我们使用专门用于此目的的专业工具,它们旨在为抓取工具提供有关网页内哪些区域可以提取您需要的数据的说明。

      我还看到 Perl 脚本设计从特定网页中提取数据。根据您解析的网站,它们可能非常有效。

      如果您访问网站过于频繁,您将被禁止(至少暂时)。

      要屏蔽您的 IP,您可以尝试 http://proxify.com/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-29
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        相关资源
        最近更新 更多