如何在我的应用程序(网络或控制台)中进行类似谷歌的重新抓取

如何在我的应用程序(Web或控制台)中进行类似Google的重新抓取。 我只需要重新抓取那些在特定日期之后更新的页面。

System.Net.WebResponse中的LastModified标头仅提供服务器的当前日期。 例如,如果我在2012年1月27日下载了一个带有HTTPWebRequest的页面,并检查LastModified日期的标题,则显示服务页面时服务器的当前时间。 在这种情况下,它只是2012年1月27日。

谁能建议任何其他方法?

首先,要指出的是,你要做的事情非常困难,并且有很多研究级别的论文试图解决它(我稍后会给你链接一些)。 虽然你可以有一些快捷方式,例如从响应标题中检查Content-Length而不下载页面的其余部分,但是无法查看网站是否在没有抓取的情况下进行了更改。 这将允许您的系统节省流量,但它不会以真正有用的方式解决您的问题。

其次,既然你关注内容,那么Last-Modified标题字段对你来说不是很有用,我甚至可以说它根本不会有用。

第三,你所描述的内容有一些相互冲突的要求,因为你只想抓取那些已经更新内容的网页,而这与Google的工作方式不完全相关(但是,你想要像谷歌一样抓取)。 谷歌的抓取重点是为最常搜索/访问过的网站提供最新鲜的内容。 例如:Google很少有兴趣频繁抓取每天两次更新其内容的网站,当时该网站每天有10位访问者,而Google则更有兴趣抓取每天获得1000万访问者的网站,即使其内容更新不太常见。 同样更新其内容的网站也可能拥有大量访问者,但从谷歌的角度来看,这并不完全相关。


如果你必须发现新的网站(报道),同时你想获得你所知道的网站的最新内容(新鲜度),那么你就会有相互冲突的目标(对于大多数抓取工具来说都是如此,甚至是Google)。 通常最终会发生的事情是,当你有更多的覆盖范围时,你的新鲜感会降低,如果你有更多的新鲜度,那么你的覆盖范围就会减少。 如果你有兴趣平衡两者,那么我建议你阅读以下文章:

  • 网络爬虫:概述
  • 之后,我建议阅读自适应在线页面重要性计算
  • 最后: 扩展到60亿页以及更多

这个想法的总结是你必须多次(可能几百次)抓取一个网站,以便你建立一个很好的历史记录。 一旦你有了一套很好的历史测量,那么你就可以使用一个预测模型来插入网站何时会再次更改,并在预期的更改后安排一段时间的爬网。