解析器/爬虫算法问题

时间:2009-10-13 15:06:20

标签: parsing web-crawler

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

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

然而,这实际上是效率低下的,并且严重限制了带宽/处理......

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

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

希望这一切都有意义! (我有更多,但试图在这里保持简短..)

由于

汤姆

3 个答案:

答案 0 :(得分:1)

我没有看到为同一站点进行多次运行的重点。

TCP / IP保证正确传输数据。如果出现错误,您将从TCP / IP堆栈中收到错误。然后重试是有道理的。如果服务器发送了错误的数据,就没有真正的希望只需要调用它3次就可以改善这种情况。

大多数网站也可能是动态的。因此,几乎不可能两次获得完全相同的结果。

答案 1 :(得分:0)

第一步是依赖HTTP缓存头。这告诉你页面是否已经发生了变化。

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

一旦过去,你就好运了,因为你需要解析页面只是为了获取数据以查看它是否已被更改。您可以在此时跳过任何后期处理,但您仍然必须使用提取和解析阶段,这可能是最昂贵的部分。

答案 2 :(得分:0)

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

  • 不要让服务器过载,让你禁止
  • 根据不同的故障模式重试
  • 最大化带宽
  • 以避免提取中的无限循环
  • 以及许多其他注意事项

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

其中一些是: