如何在抓取网站时确定循环的停止点

时间:2014-06-30 11:09:06

标签: web web-crawler

我的程序目前浏览网站收集信息的页面。当我访问所有网站页面时,如何设置循环结束?

有没有办法知道任何网站的网页数量? 或者我是否比较了我访问过的一组页面,例如10,如果再次按该顺序检查页面,我知道它会重复。

我确信必须有更好的方法知道何时停止。

4 个答案:

答案 0 :(得分:2)

跟踪访问过的网页(可能会保留一组访问过的网址),并在尝试扫描新网页时,检查是否已访问过该网页。

答案 1 :(得分:1)

Breadth first search

Depth first search

检查这两种算法。将该网站视为图形 其节点是页面,其边/弧是链接
从一页到另一页。所以两页是相邻的 B,如果有从第A页到第B页的链接。

然后只需实现这两种算法中的一种 (无论哪种情况更适合您的情况) 他们两个都有各自的停止条件。

在这两种情况下,您的搜索都应该从根目录开始 页面通常为default.extindex.ext
类似的东西(ext = html,asp,aspx,jsp,php,等等)。

答案 2 :(得分:0)

您可能希望使用 SitemapGenerator 对网站进行预处理,并且只访问网站地图中包含的网页。

答案 3 :(得分:0)

  

是否有某种方法可以了解任何网站中的网页数量

没有。检查网站所能做的就是发出HTTP GET(或HEAD)请求并检查响应。这将告诉您URI是否是资源的有效标识符,并让您获得该资源的表示。您无法知道哪些请求将指示有效资源,您也无法生成所有可能的URI以执行详尽搜索。

充其量,您可以做的就是从URI开始,通过检查包含指向其他资源的链接的资源,然后关注这些链接,从该URI中找到所有可达的资源。< / p>