首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设计一个网络爬虫

设计一个网络爬虫
EN

Stack Overflow用户
提问于 2011-04-30 00:37:46
回答 8查看 44.9K关注 0票数 73

我遇到了一个面试问题:“如果你正在设计一个网络爬虫,你将如何避免陷入无限循环?”我正在试着回答这个问题。

这一切是如何从头开始的。比方说,谷歌从一些中心页面开始,比如说数百个(这些中心页面最初是如何找到的,这是另一个子问题)。当Google跟踪来自页面的链接等等时,它是否一直在制作哈希表,以确保它不会跟踪较早访问的页面。

如果同一个页面有两个名称( URL ),比如现在我们有URL缩写等。

我以谷歌为例。虽然谷歌没有透露它的网络爬虫算法和页面排名等是如何工作的,但你能猜到吗?

EN

回答 8

Stack Overflow用户

发布于 2011-04-30 00:43:06

这取决于他们的问题有多深。如果他们只是试图避免来回使用相同的链接,那么对URL进行散列就足够了。

如果内容包含数千个指向相同内容的URL,情况会怎样?就像QueryString参数一样,它不会影响任何东西,但可以有无限的迭代次数。我想你也可以散列页面的内容并比较URL,看看它们是否与由多个URL标识的捕获内容相似。例如,参见@Lirik的帖子中提到的Bot Traps。

票数 1
EN

Stack Overflow用户

发布于 2011-04-30 00:43:39

你必须有某种哈希表来存储结果,你只需要在每个页面加载之前检查它。

票数 0
EN

Stack Overflow用户

发布于 2011-12-19 22:05:02

这里的问题不是抓取重复的URLS,这是通过使用从urls获得的散列的索引来解决的。问题是爬行重复的内容。“爬虫陷阱”的每个url都是不同的(年份、日期、SessionID...)。

没有一个“完美”的解决方案。但是你可以使用其中的一些策略:

·保留url在网站内部的级别字段。对于从页面获取urls的每个周期,增加级别。它就像一棵树。你可以在某个级别停下来爬行,比如10级(我认为谷歌使用了这个)。

·您可以尝试创建一种可以比较的散列来查找相似的文档,因为您不能与数据库中的每个文档进行比较。有来自谷歌的SimHash,但我找不到任何可使用的实现。然后我创建了我自己的。我的散列计数html代码中的低频和高频字符,并生成20字节的散列,将其与具有一定容限(大约2)的AVLTree搜索的NearNeighbors内的最后爬行页面的小高速缓存进行比较。您不能在此散列中使用任何对字符位置的引用。在“识别”陷阱之后,你可以记录重复内容的url模式,并开始忽略页面。

·像谷歌一样,你可以为每个网站创建一个排名,并比其他网站更“信任”一个网站。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5834808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档