运行Nutch的时候提示Generator: 0 records selected for fetching, exiting ...然后程序退出,怎么回事呢?
原因多种多样,归根结底就是CrawlDB中的URL经过爬虫抓取调度器(默认是org.apache.nutch.crawl.DefaultFetchSchedule)判断,断定都不应该去抓,所以,Stop The World。
我们使用命令如下命令来查看CrawlDB的统计信息:
bin/nutch readdb data/crawldb -stats
结果如下:
CrawlDb statistics start: data/crawldb Statistics for CrawlDb: data/crawldb TOTAL urls: 347457 retry 0: 346506 retry 1: 951 min score: 0.0 avg score: 6.605134E-6 max score: 1.0 status 1 (db_unfetched): 951 status 2 (db_fetched): 337818 status 3 (db_gone): 3637 status 4 (db_redir_temp): 5006 status 5 (db_redir_perm): 45 CrawlDb statistics: done
我们发现db_unfetched状态的URL还有951个,怎么不抓了呀?呵呵,别急,继续看,发现retry 1的URL也有951个,retry 1是什么东东呢?就是抓取失败了,等待1天(默认)后再次去抓的URL,哦,现在明白了吧,这些db_unfetched状态的URL其实都已经抓过了,不过都抓取失败了,因为只有抓取成功的URL的状态才会变为非db_unfetched的其他状态。
弄明白了为什么爬虫退出的原因之后,还有疑问吗?对这些抓取失败的URL是什么原因导致的失败不感兴趣吗?
我们把CrawlDB中db_unfetched状态的URL导出为文本文件,看看到底是些什么URL,失败的原因都是些什么,用如下命令:
bin/nutch readdb data/crawldb -dump crawldb_dump -format normal -status
命令执行完毕我们就可以看这个导出的文本文件里面的内容了,文件位于当前路径下crawldb_dump/part-00000。
我们要确认一下导出的文本文件的db_unfetched状态的URL的数目是否为951,用如下命令:
cat crawldb_dump/* | grep db_unfetched | wc
结果如下:
951 2853 23775
数目没问题。然后使用如下命令找到抓取失败的信息:
cat crawldb_dump/* | grep exception | wc
结果如下:
951 7300 91535
数目也是951,这就说明了状态为db_unfetched的951条URL都抓过了,不幸的是都失败了。
接着我们要从这951条失败信息中提取出抓取失败的类型,使用如下命令去除重复的失败信息:
cat crawldb_dump/* | grep exception | sort | uniq | wc
结果如下:
35 242 4034
去重之后只剩下35条了,太好了,人眼可以识别了呀,呵呵,我们进一步去除以:隔开的前三个字段,这3个字段每条数据都相同,使用以下命令:
cat crawldb_dump/* | grep exception | sort | uniq | awk -F ":" '{print $4 $5}' | uniq | more
结果如下:
Http code=403, url=http//bgt.mof.gov.cn/mofhome/mof/1557/ Http code=403, url=http//bgt.mof.gov.cn/mofhome/mof/zhengwuxinxi/tianbanli/2006tabl/rdjydf/ Http code=403, url=http//bgt.mof.gov.cn/mofhome/mof/zhengwuxinxi/tianbanli/2006tabl/zs/ Http code=403, url=http//bgt.mof.gov.cn/mofhome/mof/zhengwuxinxi/tianbanli/2006tabl/zxtadf/ Http code=403, url=http//bgt.mof.gov.cn/mofhome/mof/zhuantihuigu/czgg0000_1/spjl/ Http code=403, url=http//gjs.mof.gov.cn/mofhome/mof/1557/ Http code=403, url=http//gjs.mof.gov.cn/mofhome/mof/zhengwuxinxi/tianbanli/2006tabl/rdjydf/ Http code=403, url=http//gjs.mof.gov.cn/mofhome/mof/zhengwuxinxi/tianbanli/2006tabl/zs/ Http code=403, url=http//gjs.mof.gov.cn/mofhome/mof/zhengwuxinxi/tianbanli/2006tabl/zxtadf/ Http code=403, url=http//gjs.mof.gov.cn/mofhome/mof/zhuantihuigu/czgg0000_1/spjl/ Http code=403, url=http//gjs.mof.gov.cn/pindaoliebiao/dhjz/qqhzjz/20Ghy/czyhhzhy/5156/ Http code=403, url=http//gjs.mof.gov.cn/pindaoliebiao/zcyd/dhjz/20Ghy/czyhhzhy/5156/ Http code=403, url=http//kjhx.mof.gov.cn/gongzhongcanyu/ Http code=403, url=http//sn.mof.gov.cn/lanmudaohang/zixz/ Http code=403, url=http//wjb.mof.gov.cn/pindaoliebiao/ Http code=403, url=http//www.mof.gov.cn/1557/ Http code=403, url=http//www.mof.gov.cn/zhengwuxinxi/tianbanli/2006tabl/rdjydf/ Http code=403, url=http//www.mof.gov.cn/zhengwuxinxi/tianbanli/2006tabl/zs/ Http code=403, url=http//www.mof.gov.cn/zhengwuxinxi/tianbanli/2006tabl/zxtadf/ Http code=403, url=http//www.mof.gov.cn/zhuantihuigu/czgg0000_1/spjl/ Http code=403, url=http//xxzx.mof.gov.cn/zaixianfuwuxxzx/ Http code=403, url=http//xxzx.mof.gov.cn/zhuantilanmuxxzx/ Http code=403, url=http//zcpg.mof.gov.cn/skzd/skjs/ Http code=403, url=http//zcpg.mof.gov.cn/zywk/pgll/ Http code=403, url=http//zhs.mof.gov.cn/zhuantilanmu/ Http code=500, url=http//zcgl.mof.gov.cn/ java.net.ConnectException Connection refused java.net.SocketException Connection reset java.net.SocketTimeoutException connect timed out java.net.SocketTimeoutException Read timed out java.net.UnknownHostException czxh.mof.gov.cn java.net.UnknownHostException docsvr.mof.gov.cn java.net.UnknownHostException shdk.mof.gov.cn java.net.UnknownHostException www.hn.mof.gov.cn java.net.UnknownHostException ysyj.mof.gov.cn
经过人工分析(自动分析不奏效了)发现了7种不同类型的抓取错误(注意:你的系统中跟我的可能不同):
Http code=403 Http code=500 Connection refused Connection reset connect timed out Read timed out java.net.UnknownHostException
分别使用这7种不同的抓取错误类型重新从导出的文件中进行统计,结果仍然是951。
cat crawldb_dump/* | grep "connect timed out" | wc cat crawldb_dump/* | grep "Read timed out" | wc cat crawldb_dump/* | grep 'Http code=403' | wc cat crawldb_dump/* | grep 'Connection refused' | wc cat crawldb_dump/* | grep "Connection reset" | wc cat crawldb_dump/* | grep java.net.UnknownHostException | wc cat crawldb_dump/* | grep 'Http code=500' | wc
好了,分析完毕,贴一张更直观完整的图来结束文章:
相关推荐
为达成这一目标,Nutch需要能够每月爬取数十亿网页,维护索引,执行每秒上千次的搜索请求,并提供高质量的搜索结果,同时还要保证最低的运行成本。 与Lucene的区别:简单来说,Lucene是一个用于实现全文检索的软件...
在提供的文件中,"提高nutch运行效率的优化方法1.png"和"提高nutch运行效率的优化方法2.png"可能是展示具体优化步骤的图表,而"提高nutch运行效率的原理.png"则可能解释了Nutch运行的基本原理,这些图像可以帮助读者...
Nutch程序运行环境配置是Java开发中的一个重要环节,特别是在Windows操作系统上进行Nutch相关的开发工作。Nutch是一个开源的Web爬虫项目,用于抓取互联网上的网页并建立索引,通常与Hadoop等大数据处理框架结合使用...
在本文中,我们将深入探讨如何搭建Nutch2.3.1的运行环境,以便进行网页抓取和分析。 **一、系统需求** 首先,确保你的系统满足以下基本要求: 1. 操作系统:Nutch可以在Linux、Unix或Mac OS X等类Unix系统上运行,...
Apache Nutch 是一个开源的网络爬虫框架,用于抓取互联网上的网页并生成索引,以便于搜索引擎使用。本文将详细介绍如何在Windows环境下配置Nutch 1.4,并使用Eclipse进行开发。以下是你需要知道的关键步骤: 1. **...
搭建Nutch框架涉及到多个步骤,首先需要确保服务器环境符合Nutch的运行要求,通常推荐使用Linux操作系统。具体步骤如下: 1. **环境准备**:安装Java运行环境,因为Nutch是基于Java开发的,Java版本应符合Nutch的...
### Nutch:一个开源的网络搜索引擎平台 #### 概述 Nutch 是一个由 Apache Software Foundation 托管的开源项目,旨在提供一个完整的、高质量的网络搜索系统,并为开发新型网络搜索引擎提供了一个灵活且可扩展的...
然后,他们可以运行Nutch的命令行工具进行网页抓取、索引创建以及查询操作。 总的来说,这个Nutch1.0修改版体现了开源社区的力量,通过协作和共享,解决了特定语言环境下(如中文)的问题,提升了工具的适用性和...
3. **运行Nutch**:执行Nutch的命令行工具,如`bin/nutch crawl`,启动爬虫流程。 4. **搜索关键词**:Nutch完成索引后,可以通过HTTP接口或API,使用IndexSearcher搜索含有特定关键词的文档。 四、实际应用示例 ...
Nutch是Apache软件基金会开发的一个开源Web搜索引擎项目,它的设计目标是提供一个可扩展、灵活的搜索解决方案。Nutch不仅能够抓取和索引互联网上的网页,还支持对抓取的数据进行分析和处理,以便为用户提供高质量的...
为了使Nutch在Eclipse中正常运行,你需要修改Nutch的默认配置文件`nutch-default.xml`。具体而言,将`plugin.folders`参数改为`"./src/plugin"`,以确保Nutch能够识别到项目的插件目录。 #### 步骤5:设置URL文件 ...
Cygwin是一个在Windows上模拟Linux环境的开源软件,它提供了许多在Linux环境下才能运行的命令行工具,使得我们能够在Windows系统上执行类似Linux的操作,这对于需要在Windows系统中运行Nutch这样的基于Unix/Linux的...
- 在Cygwin环境中执行 `bin/nutch` 命令,按照提示完成抓取任务的配置与启动。 2. **检查日志**: - 查看Nutch的工作日志,确保没有错误发生。 - 如果出现任何问题,请参考官方文档或社区资源进行排查。 #### ...
因为 Nutch 原生设计在 Linux 环境下运行,所以在 Windows 上配置 Nutch 需要一些额外的步骤。主要有两种方法: - **在 Eclipse 中使用 Nutch**: - 创建一个新的 Java 项目。 - 导入 Nutch 源码,将 `src\java`...
《Nutch入门经典翻译1:Introduction to Nutch, Part 1: Crawling》一文深入介绍了Nutch这一开源网络爬虫框架的基本概念、体系结构及其关键组件,为初学者提供了全面的理解视角。以下是对该文章核心知识点的详细解读...
这个“nutch-windows-script”项目提供了一套专为Windows环境设计的脚本,使得在Windows上运行Nutch 2.1变得更加方便。在Windows操作系统中,由于默认不支持Bash shell,因此通常需要额外的配置来执行基于Unix/Linux...
Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,是大数据和搜索引擎技术的重要组成部分。Nutch 2.2.1 是该项目的一个稳定版本,包含了许多优化和改进。源码的提供使得用户可以深入理解...