首页
/ Yahoo/Anthelion 爬虫脚本 crawl 使用指南

Yahoo/Anthelion 爬虫脚本 crawl 使用指南

2025-07-10 05:57:24作者:裴麒琰

概述

Yahoo/Anthelion 项目中的 crawl 脚本是一个完整的网络爬虫执行流程控制脚本,它封装了从种子注入到最终索引的全套爬取流程。本文将深入解析这个脚本的工作原理、参数配置和使用方法。

脚本功能

该脚本实现了以下完整的爬虫工作流程:

  1. 初始种子注入
  2. 多轮爬取循环(生成-抓取-解析-更新)
  3. 链接反转处理
  4. Solr 索引和去重

参数说明

脚本需要四个必需参数:

crawl <seedDir> <crawlDir> <solrURL> <numberOfRounds>
  • seedDir:种子URL目录路径
  • crawlDir:爬取数据存储目录
  • solrURL:Solr服务地址
  • numberOfRounds:爬取轮次

关键配置参数

脚本中提供了多个可调整的参数,这些参数直接影响爬取效率和资源使用:

# 从节点数量
numSlaves=1

# 总任务数(mapred.reduce.tasks)
numTasks=`expr $numSlaves \* 2`

# 每次迭代抓取的URL数量
sizeFetchlist=`expr $numSlaves \* 50000`

# 抓取时间限制(分钟)
timeLimitFetch=180

# 抓取线程数
numThreads=50

工作流程详解

1. 初始注入

$bin/nutch inject $CRAWL_PATH/crawldb $SEEDDIR

将种子URL注入到爬取数据库中,为后续爬取做准备。

2. 主循环流程

脚本执行指定轮次的主循环,每轮包含以下步骤:

生成阶段

$bin/nutch generate $commonOptions $CRAWL_PATH/crawldb $CRAWL_PATH/segments -topN $sizeFetchlist -numFetchers $numSlaves -noFilter

从爬取数据库生成待抓取的URL列表,创建新的segment。

抓取阶段

$bin/nutch fetch $commonOptions -D fetcher.timelimit.mins=$timeLimitFetch $CRAWL_PATH/segments/$SEGMENT -noParsing -threads $numThreads

实际抓取网页内容,使用多线程提高效率。

解析阶段

$bin/nutch parse $commonOptions $skipRecordsOptions $CRAWL_PATH/segments/$SEGMENT

解析抓取的网页内容,提取文本和链接。

更新数据库

$bin/nutch updatedb $commonOptions $CRAWL_PATH/crawldb $CRAWL_PATH/segments/$SEGMENT

用新抓取的数据更新爬取数据库。

3. 链接反转

$bin/nutch invertlinks $CRAWL_PATH/linkdb $CRAWL_PATH/segments/$SEGMENT

建立反向链接数据库,记录哪些页面链接到当前页面。

4. 索引和去重

$bin/nutch solrindex $SOLRURL $CRAWL_PATH/crawldb -linkdb $CRAWL_PATH/linkdb $SEGMENT
$bin/nutch solrdedup $SOLRURL

将抓取内容索引到Solr,并执行去重操作。

运行模式

脚本支持两种运行模式:

  1. 本地模式:当检测到本地环境时使用
  2. 分布式模式:当检测到Hadoop环境时使用

模式检测逻辑:

mode=local
if [ -f ../nutch-*.job ]; then
    mode=distributed
fi

使用建议

  1. 根据服务器资源配置调整numSlavesnumThreads等参数
  2. 对于大规模爬取,建议使用分布式模式
  3. 可以通过创建.STOP文件来优雅停止爬取过程
  4. 监控timeLimitFetch参数,防止单个页面抓取时间过长

常见问题处理

  • 参数缺失:脚本会检查所有必需参数,缺失时会提示正确用法
  • Hadoop环境问题:分布式模式下会检查Hadoop可执行文件是否存在
  • 错误处理:每个步骤都有错误检查,失败时会立即退出

通过合理配置和正确使用,这个爬虫脚本可以高效地完成大规模网络数据的抓取和索引工作。