Yahoo/Anthelion 爬虫脚本 crawl 使用指南
2025-07-10 05:57:24作者:裴麒琰
概述
Yahoo/Anthelion 项目中的 crawl
脚本是一个完整的网络爬虫执行流程控制脚本,它封装了从种子注入到最终索引的全套爬取流程。本文将深入解析这个脚本的工作原理、参数配置和使用方法。
脚本功能
该脚本实现了以下完整的爬虫工作流程:
- 初始种子注入
- 多轮爬取循环(生成-抓取-解析-更新)
- 链接反转处理
- 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,并执行去重操作。
运行模式
脚本支持两种运行模式:
- 本地模式:当检测到本地环境时使用
- 分布式模式:当检测到Hadoop环境时使用
模式检测逻辑:
mode=local
if [ -f ../nutch-*.job ]; then
mode=distributed
fi
使用建议
- 根据服务器资源配置调整
numSlaves
、numThreads
等参数 - 对于大规模爬取,建议使用分布式模式
- 可以通过创建
.STOP
文件来优雅停止爬取过程 - 监控
timeLimitFetch
参数,防止单个页面抓取时间过长
常见问题处理
- 参数缺失:脚本会检查所有必需参数,缺失时会提示正确用法
- Hadoop环境问题:分布式模式下会检查Hadoop可执行文件是否存在
- 错误处理:每个步骤都有错误检查,失败时会立即退出
通过合理配置和正确使用,这个爬虫脚本可以高效地完成大规模网络数据的抓取和索引工作。