Parsing 解析器/爬虫算法问题

Parsing 解析器/爬虫算法问题,parsing,web-crawler,Parsing,Web Crawler,在目标爬虫/解析器的高级设计过程中。该应用程序将用于从特定网站提取数据。此外,该应用程序被设计为在主/从进程中运行,主/服务器端处理要解析的数据包,然后允许系统中的子节点(客户端服务器)获取要解析的数据包批次。(在解析过程中使用Xpath来提取解析站点的每个页面的数据。) 我在这里发帖,因为我想知道如何高效地实现以确保应用程序获取的数据是正确的。我正在考虑实施一个流程,在目标站点上至少运行两次,如果结果不同,则运行第三次,然后使用两次运行匹配的结果,如果应用程序在所有3次运行中都得到不同的结果,

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

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

然而,这会变得非常低效,并且会严重增加带宽/处理

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

所以。。我基本上是问是否有人有指向任何类型的文档/文章/想法/等等的指针。。关于如何解决这个问题。。我认为有人/应用程序解决了这个问题。也就是说,像simplyhired/这样的网站确实解决了这类问题,在那里你需要清理底层工作网站,并确保你获得的数据是正确的

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

谢谢


Tom

我不认为在同一个站点上进行多次运行有什么意义

TCP/IP保证数据的正确传输。如果出现错误,您将从TCP/IP堆栈中获取错误。那么重试是有意义的。如果服务器发送了错误的数据,那么仅仅调用3次就不可能改善这种情况


此外,大多数网站可能是动态的。因此,实际上不可能两次得到完全相同的结果。

第一步是依赖HTTP缓存头。这将告诉您页面是否已更改

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


一旦过了这一关,你就有点运气不好了,因为你需要解析页面,只是为了获取数据,看看它是否发生了变化。在这一点上,您可以跳过任何后期处理,但您仍然需要执行抓取和解析阶段,这可能是最昂贵的部分。

为什么还要构建另一个爬虫程序?有很多非常好的实现已经解决了以下问题:

  • 不要让服务器超载,给你一个禁令
  • 根据不同的故障模式重试
  • 最大化带宽
  • 避免获取过程中出现无限循环
  • 还有很多其他的考虑
您可以将您的软件与这些现有的爬虫集成在一起,并感到高兴。或者,如果你想做更多的工作,你可以将它们嵌入到你的应用程序中(可能比看起来更难,优秀的爬虫程序非常复杂。)

其中一些是:

  • Heritrix,archive.org的爬虫程序:
  • 电线:

嗨。。。多次运行的理由。我正在解析大学课程表,从注册处到学校,到系,再到班级,任何/所有这些页面都可能被学校更改,因此应用程序需要不断地重新解析。但是,如果我确定“页面;与已缓存/获取的版本相同,应用程序可以使用页面的当前版本生成后续数据包,以解析站点的后续页面“我在这里发帖,因为我想知道如何高效地实施,以确保应用程序获取的数据是正确的。我正在考虑实施一个流程,在目标站点上至少运行两次,如果结果不同,则运行第三次,然后使用两次运行匹配的结果,如果应用程序在所有3次运行中都得到不同的结果,则会出现错误……”部分。仅使用最新的结果就足够了。