Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 - Fatal编程技术网

Web crawler 不对同一内容进行两次爬网

Web crawler 不对同一内容进行两次爬网,web-crawler,Web Crawler,我正在构建一个小型应用程序,它将对内容不断增长的站点(如stackoverflow)进行爬网。不同的是,创建的内容很少被修改 现在,在第一步中,我将抓取站点中的所有页面 但接下来,该网站的页面内容——我不想重新抓取所有内容,只想抓取最新添加的内容 因此,如果站点有500个页面,在第二次访问中,如果站点有501个页面,那么我只会抓取第一和第二个页面。这是处理这种情况的好办法吗 最后,爬网的内容将在lucene中结束-创建一个自定义搜索引擎 因此,我希望避免对同一内容进行多次爬网。还有更好的主意吗

我正在构建一个小型应用程序,它将对内容不断增长的站点(如stackoverflow)进行爬网。不同的是,创建的内容很少被修改

现在,在第一步中,我将抓取站点中的所有页面

但接下来,该网站的页面内容——我不想重新抓取所有内容,只想抓取最新添加的内容

因此,如果站点有500个页面,在第二次访问中,如果站点有501个页面,那么我只会抓取第一和第二个页面。这是处理这种情况的好办法吗

最后,爬网的内容将在lucene中结束-创建一个自定义搜索引擎

因此,我希望避免对同一内容进行多次爬网。还有更好的主意吗

编辑:

假设该站点有一个页面:结果,可以这样访问:

结果?第1页,结果?第2页…等等


我想记录下上次爬网时有多少页,只要抓取差异就足够了。(可能使用页面上每个结果的散列-如果我开始遇到相同的散列-我应该停止)

如果每个内容都位于一个唯一的位置,只需将这些位置(可能是URL)馈送到散列字段中,并在“爬行”内容之前检查它。无论如何,URL应该是您在Lucene中存储的数据的一部分,因此在添加到索引之前进行搜索应该很容易做到这一点。

我的方法是存储所看到的每个页面内容的哈希/指纹。这样,当您重新蚀刻页面时,您将验证指纹,如果指纹匹配,则不会发生任何更改,也不需要解析,因为您已经处理了页面及其上的所有链接

站点是否为获取的每个资源发布有效的电子标签?如果是这样,您可以发布已知资源的条件GET,并且在服务器发送资源(即资源已更改)的情况下,您可以查找新链接以进行爬网、更新内容等

当然,只有当你的网站发布电子标签并响应有条件的get

  • 对网站进行标准的站点范围爬网,以获取所有历史内容
  • 跟踪他们的RSS提要以查找新内容
  • 定期重复站点范围的爬网以获取更新的内容

  • 查看“上次修改的”HTTP头。在C#中,从HttpWebResponse,如果它不等于DateTime。现在,内容已更改。因此,您可以使用本地内容(假设您正在存储它)为您的爬虫提供信息

    因此,在爬网时,存储网页内容和“上次修改”标题

    此外,您可以存储每个唯一的AbsoluteUri,直到AbsoluteUri的查找时间超过获取页面所需的时间为止,这样做效果很好,也可以使用Bloom筛选器:


    除了弄清楚谷歌网站地图(或RSS提要)的位置外,你不知道新内容添加到了哪里。自动知道就像一个窃贼问你新买的东西在哪里,而不先问你。:)

    我真的不知道问题是什么。如果你假设内容永远不会被修改,你希望新的可爬网链接如何出现?除了Thomas所说的,这种方法没有考虑到插入后内容可能会被更改。把它放在这里,想一想有很多答案的问题,其中澄清是对原始问题的修改……正如我在编辑中提到的,我的意思是,一旦添加了“结果”,它就不会改变。当我说pages时,我的意思更多的是分页一些结果。添加内容后,页面总数会发生变化,但一个结果的内容通常不会发生变化。该死,你是对的,我刚刚意识到页面上的每个结果都必须有一个唯一的url。谢谢:)但实际上获取页面可能比解析页面并将其添加到索引要慢。你需要把它取出来散列这就是冲突。。除非您获取它(或者直接询问服务器它是否更改),否则您不知道它是否更改。。OP如何知道页面计数已更改?了解页面名称与了解其内容不同。。至少我知道页面与之类似,页面确实会发生变化。