Nutch 互联网抓取
1. 下载列表获取
真正实现全互联网数据抓取需要一个比较大的入口 URL 列表,幸运的是 Nutch 在设计时考虑到了这个问题。通过 DmozPraser 工具提供了对开放式互联网 DMOZ 目录库的支持。 DMOZ 目录库可以直接从网上下载使用,目前最新版的数据压缩文件 content.rdf.u8.gz 有 295MB ,解压缩后达到 1.91GB 。使用 DmozPraser 工具可以从文件中随机抽取部分数据,生成文件列表,详细操作命令如下所示:
bin/nutch org.apache.tools.DomzPraser content.rdf.u8 -subset 3000 >domzurls.txt
命令执行的结果是 Nutch 根目录下生成了一个 dmozurls.txt 的文本文件。该文件可以作为入口地址添加到下载库中。如果要建立全互联网的搜索引擎,可以把 content.rdf.u8 中的所有数据添加到下载库。下载全网数据是一项费时费力的工作,且超过了个人实验的范围,而且 dmozurls 文本文件中包含了很多国外的站点,我们访问比较慢。所有我们将采取另外一种办法。
另外一种办法是查找国内比较大的互联网站点。这些站点的 URL 是通过分析 http://top.chinalabs.com/, http://top.chinaz.com/, http://www.chinarank.org.cn/ 三大中国互联网排行网站获得。应该说可以具有代表性。分析的原理和过程在此不作赘述。得到一个 chinaurls.txt 的文本。部分结果如下:
http://www.baidu.com http://www.qq.com http://www.google.cn http://www.sina.com.cn http://www.163.com http://www.taobao.com http://www.soso.com http://www.sohu.com http://www.youku.com http://www.tianya.cn http://www.hao123.com http://www.kaixin001.com http://www.alibaba.com http://www.sogou.com http://www.ifeng.com http://www.cnzz.com http://www.chinaz.com http://www.xunlei.com http://www.soufun.com http://www.126.com
2. 下载大量网站
入口 URL 列表准备好之后,下一步的工作就是导入 Nutch 系统,完成下载工作,具体过程如下:
1) 打开 Nutch 的根目录,新建一个 InternetWeb 和 urls 目录
2) 复制 chinaurls.txt 文件到 Nutch 的根目录下的 urls 目录。利用文件内容向 InternetWeb 目录数据库里面添加初始的入口 URL ,命令及执行结果如下:
3) 修改 Nutch 根目录下 conf/nutch-site.xml 文件,设置 http.agent.name 属性的值。这个属性值在抓取网页的时候,会携带于 HTTP 请求的协议头里面,用来表明网络蜘蛛身份,修改内容如下。
4) 利用 craswdb 中已经注入的 URL 下载列表,调用 generate 命令创建一个新的数据段,存放在 InternetWeb 目录下。命令及执行结果如下:
5) 查看 segments 目录下最新生成的以日期时间命名的文件夹。当前生成的文件夹的名称是 20100325211446. 接下来根据文件夹下生成的下载列表获取页面的内容。命令如下:
6) 从已经下载的段数据列表里获取 URL 链接,更新 crawldb 库里的内容。命令及执行过程如下:
7) 循环执行( 4 ),( 5 ),( 6 )下载页面,直到 crawldb 的列表完成或者达到网页深度。此处的深度控制需要通过循环次数控制。
8) 调用 invertlinks 命令建立所有的链接。
9) 索引页面内容。命令如下:
这样,一个简化的互联网数据已经下载完成了。