Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web crawler 如何在爬虫程序中处理页面更新?_Web Crawler_Search Engine - Fatal编程技术网

Web crawler 如何在爬虫程序中处理页面更新?

Web crawler 如何在爬虫程序中处理页面更新?,web-crawler,search-engine,Web Crawler,Search Engine,去年我在为一个搜索引擎构建一个爬虫程序,我们遇到了处理页面更新的问题;页面会随着时间的推移而变化,我们需要跟踪这种变化,并在知道这些页面的内容发生变化时重新抓取这些页面 所以,我们向我们的教授寻求解决这个问题的方法,他让我们寻找这些页面的网站地图。我们发现并不是所有的页面都包含可以帮助我们解决这个问题的网站地图,我们告诉他,所以他告诉我们一个——有点奇怪——的解决方案,可以在随机的时间值后重新爬网 也就是说,我已经试着调查这个问题,但没有找到任何可以帮助我的方法。所以为了以最低的效率解决这个问题

去年我在为一个搜索引擎构建一个爬虫程序,我们遇到了处理页面更新的问题;页面会随着时间的推移而变化,我们需要跟踪这种变化,并在知道这些页面的内容发生变化时重新抓取这些页面

所以,我们向我们的教授寻求解决这个问题的方法,他让我们寻找这些页面的网站地图。我们发现并不是所有的页面都包含可以帮助我们解决这个问题的网站地图,我们告诉他,所以他告诉我们一个——有点奇怪——的解决方案,可以在随机的时间值后重新爬网

也就是说,我已经试着调查这个问题,但没有找到任何可以帮助我的方法。所以为了以最低的效率解决这个问题,我存储了我爬网的每个页面的散列值,然后在这个随机时间之后重新爬网时,我检查当前页面的散列值并比较上次保存的散列值。如果有不同,我会重新抓取这一页


我想知道是否有更有效的方法来跟踪页面的最新情况,这取决于页面是否使用约定。大多数主要网站将使用缓存控制头(或上次修改和ETag)。如果你正在爬行的站点使用了这些信息,那么当页面发生变化时,这些信息应该会告诉你。因此,我认为范围最广、效率最高的方法是检查这些东西,如果它们存在,就使用它们。如果它们不存在,那么您可以使用页面散列方法,尽管即使获取页面散列也可能无法按预期工作,例如,如果所讨论的站点在服务器上动态呈现一些微小更改(例如,当前日期/时间、呈现时间等)

我用的散列页面的技术,它真的被使用了吗?或者他们通常坚持检查上次修改的和ETag吗?这不是一个坏的回退策略,但大多数人使用ETag和修改的。