我只是想到了这个想法,并想知道是否可以在一个专用服务器上抓取整个网络(就像大男孩一样!)(如Core2Duo,8gig ram,750gb磁盘100mbps).
我已经看过一篇论文,这篇论文已经完成......但我不记得这篇论文的标题了.它就像是使用一些统计模型在单个专用服务器上爬行整个网络.
无论如何,想象一下从大约10,000个种子URL开始,并进行详尽的爬行....
可能吗 ?
我需要爬网,但仅限于专用服务器.我怎么能这样做,那里有一个开源解决方案吗?
例如,看到这个实时搜索引擎.http://crawlrapidshare.com结果非常好并且刚刚更新......他们是如何做到这一点的?
爬行Web在概念上很简单.将Web视为一个非常复杂的有向图.每个页面都是一个节点.每个链接都是有向边.
你可以假设一个精心挑选的起点最终将导致所有其他点(最终).这不是严格正确的,但在实践中我认为你会发现它大多是真的.仍有机会你需要多个(可能是数千个)起点.
您需要确保不要遍历同一页面两次(在一次遍历中).在实践中,遍历将花费很长时间,这只是一个问题,即你回到特定节点之前多久以及你如何检测和处理变化(这意味着你第二次来到一个页面它可能已经改变了).
杀手将是您需要存储多少数据以及一旦获得它就想要用它做什么.
我相信你所指的论文是"IRLbot:扩展到60亿页以上".这是由Texas A&M的学生编写的单个服务器网络爬虫.
撇开带宽,磁盘空间,爬行策略,robots.txt/politeness等问题 - 我得到的主要问题是"为什么?" 对整个Web进行爬网意味着您正在使用来自数百万个Web服务器的共享资源.目前,大多数网站管理员都允许机器人抓取它们,只要它们玩得很好并遵守礼貌抓取的隐式和明确规则.
但是,除了大男孩(谷歌,雅虎,必应等)之外,每个大型机器人都会在没有明显好处的情况下摧毁一个网站,导致几个网站关闭了大门.因此,你真的想在花费太多时间研究方法之前问问题.
假设您确实需要在单个服务器上抓取大部分Web,那么您需要获得更胖的管道,更多的存储空间(例如假设每页2K压缩文本,因此1B页面为2TB),批次更多RAM,至少4个真实核心等.IRLbot论文将是您最好的指南.您可能还想查看crawler-commons项目以获取可重用的Java代码块.
最后要小心谨慎.一个无辜的错误很容易引发一个网站的问题,那时你将成为一个愤怒的网站管理员火焰的接收端.所以要确保你有厚厚的皮肤:)
很抱歉,经过这么长时间才恢复这个线程,但我只是想指出,如果你只是需要一个非常大的网络数据集,那么获得它的方法要比用一个单独尝试抓取整个网页更容易. server:只需下载Common Crawl项目提供的免费抓取数据库.用他们的话说:
我们构建并维护一个可以由任何人访问和分析的Web爬网数据的开放存储库.
截至今天,他们的数据库大小为PB级,包含数十亿页(数万亿条链接).只需下载它,并执行您感兴趣的任何分析.