如何在我的应用程序(网络或控制台)中进行类似Google的重新抓取。我只需要重新抓取那些在特定日期之后更新的页面。
System.Net.WebResponse中的LastModified标头仅提供服务器的当前日期。例如,如果我在2012年1月27日下载了一个带有HTTPWebRequest的页面,并检查LastModified日期的标题,则显示服务页面时服务器的当前时间。在这种情况下,它只是2012年1月27日。
有人可以建议任何其他方法吗?
答案 0 :(得分:7)
首先,要指出的是,你要做的事情非常困难,并且有很多研究级别的论文试图解决它(我会给你一些关于它们的链接后来)。虽然您可以使用快捷方式,例如从响应标头检查Content-Length而不下载页面的其余部分,但无法查看网站是否已更改而未对其进行爬网。这将允许您的系统节省流量,但它不会以真正有用的方式解决您的问题。
其次,由于您对内容感到担忧,因此Last-Modified
标题字段对您来说不是很有用,我甚至会说它根本不会有用。
第三,你所描述的内容有一些相互矛盾的要求,因为你只对抓取已更新内容的网页感兴趣,而这与Google的工作方式不完全相同(但是,你需要类似谷歌的抓取)。谷歌的抓取重点是为最常搜索/访问过的网站提供最新鲜的内容。例如:Google很少有兴趣频繁抓取每天两次更新其内容的网站,当时该网站每天有10位访问者,而Google则更有兴趣抓取每天获得1000万访问者的网站,即使其内容更新不太常见。同样更新其内容的网站也可能拥有大量访问者,但从谷歌的角度来看,这并不完全相关。
如果你必须发现新的网站(报道),同时你想获得你所知道的网站的最新内容(新鲜度),那么你就会有相互冲突的目标(对于大多数抓取工具来说都是如此,甚至是Google )。通常最终会发生的事情是,当你有更多的报道时,你的新鲜感会降低,如果你有更多的新鲜感,那么你的报道就会减少。如果你有兴趣平衡两者,那么我建议你阅读以下文章:
这个想法的摘要是你必须多次抓取一个网站(可能几百次),以便你建立一个很好的历史记录。一旦你有了一套很好的历史测量数据,那么你就可以使用预测模型来插入网站何时会再次更改,并在预期的更改后安排爬行一段时间。