【问题标题】:parser/crawler algorithm question解析器/爬虫算法问题
【发布时间】:2009-10-13 15:06:19
【问题描述】:

在目标爬虫/解析器的高级设计过程中。该应用程序将用于从特定网站提取数据。此外,该应用程序被设计为在主/从进程中运行,主/服务器端处理要解析的数据包,然后允许系统中的子节点(客户端服务器)获取该批数据包解析。 (在解析过程中使用Xpath来提取被解析站点每个页面的数据。)

我在这里发帖,因为我想知道如何有效地实现以确保应用程序获取的数据是正确的。我正在考虑实施一个流程,我在目标站点上至少运行两次,如果结果不同,则进行第三次运行,然后使用匹配的两次运行,通过错误,如果应用程序得到不同的结果对于所有 3 次运行...

但是,这会变得非常低效,并且会严重提高带宽/处理速度...

我认为我需要进行多次运行的原因是,底层数据/站点会每天都在变化。但如果应用程序可以,我希望能够尽快“停止”后续运行确定页面上的基础数据没有改变..

所以..我基本上是在问是否有人有任何类型的文档/文章/想法/等的指针。关于如何/已经解决了这个问题。我认为有些人/应用程序已经解决了这个问题。 IE,一个像simplyhired/indeed这样的网站,你需要抓取底层工作网站,并确保你获得的数据是正确的,已经解决了这种事情......

希望这一切都有意义! (我还有更多,但在这里尽量简短..)

谢谢

汤姆

【问题讨论】:

    标签: parsing web-crawler


    【解决方案1】:

    我看不出为同一个站点进行多次运行的意义。

    TCP/IP 保证正确传输数据。如果出现错误,您将从 TCP/IP 堆栈中得到错误。然后重试是有意义的。如果服务器会发送错误的数据,那么仅仅调用 3 次就不会以某种方式改善这种情况。

    此外,大多数网站可能是动态的。所以几乎不可能两次得到完全相同的结果。

    【讨论】:

    • 嗨...多次运行的基本原理。我正在分析大学课程表,从注册员到学校,到部门,再到班级,大学可以更改任何/所有这些页面,因此应用程序需要不断重新分析。但是,如果我确定'页面;与已经缓存/获取的版本相同,然后应用程序可以使用页面的当前版本,生成后续数据包以解析站点的后续页面。
    • 我在回复“我在这里发帖,因为我想知道如何有效地实施以确保应用程序获取的数据是正确的。我正在考虑实施一个我在在目标站点上至少运行两次,如果结果不同,则进行第三次运行,然后使用匹配的两次运行,通过错误,如果应用程序在所有 3 次运行中得到不同的结果......”部分。使用最新的结果就足够了。
    【解决方案2】:

    第一步是依赖 HTTP 缓存标头。这会告诉您页面是否发生了变化。

    并非所有网站都对缓存友好,但很多都是。

    一旦过去,您就有点不走运了,因为您需要解析页面只是为了获取数据以查看它是否已更改。此时您可以跳过任何后期处理,但您仍然需要完成获取和解析阶段,这可能是最昂贵的部分。

    【讨论】:

      【解决方案3】:

      为什么还要构建另一个爬虫?有很多非常好的实现已经解决了如何:

      • 不要让服务器超载,让你被封号
      • 根据不同的故障模式重试
      • 最大化带宽
      • 避免在抓取过程中出现无限循环
      • 以及许多其他注意事项

      您可以将您的软件与这些现有的爬虫集成,并感到高兴。或者,如果你想做更多的工作,你可以将它们嵌入到你的应用程序中(可能比看起来更难,伟大的爬虫是非常复杂的野兽。)

      其中一些是:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        相关资源
        最近更新 更多