命令:$ bin/nutch crawl tianya -dir crawl_tianya -depth 3 -topN 10(存放seed路径在tianya目录下)
抓取过程为:
Injector-》
Generator-》Fetcher-》ParseSegment-》CrawlDb update depth=1
Generator-》Fetcher-》ParseSegment-》CrawlDb update depth=2
Generator-》Fetcher-》ParseSegment-》CrawlDb update-》LinkDb depth=3
也就是说往复循环Generator-》Fetcher-》ParseSegment-》CrawlDb update 这个过程;
第一次注入url初值,Generator urls,Fetcher网页,ParseSegment解析数据,update CrawlDb ;
之后每次更新crawldb,即url库。
抓去完成之后生成3个目录:
Crawldb
Linkdb
Segments
Crawldb中存放的是url地址,第一次根据所给url http://www.tianya.cn/blog/进行注入;第一次结束时update crawldb 保存第一次抓取的url地址,下一次即depth=2的时候就会从crawldb中获取新的url地址集,进行新一轮的抓取。
Crawldb中有两个文件夹:current 和old current就是当前url地址集,old是上一次的一个备份。
Current和old结构相同 里面都有part-00000这样的一个文件夹 在part-00000里面分别有data和index两个文件。一个存放数据,一个存放索引。
对crawldb文件夹内容的查看命令:
$ bin/nutch readdb
Usage: CrawlDbReader <crawldb> (-stats | -dump <out_dir> | -topN <nnnn> <out_dir> [<min>] | -url <url>)
<crawldb> directory name where crawldb is located
-stats [-sort] print overall statistics to System.out
[-sort] list status sorted by host
-dump <out_dir> [-format normal|csv|crawldb] dump the whole db to a text file in <out_dir>
[-format csv] dump in Csv format
[-format normal] dump in standard format (default option)
[-format crawldb] dump as CrawlDB
[-regex <expr>] filter records with expression
[-status <status>] filter records by CrawlDatum status
-url <url> print information on <url> to System.out
-topN <nnnn> <out_dir> [<min>] dump top <nnnn> urls sorted by score to <out_dir>
[<min>] skip records with scores below this value.
This can significantly improve performance.
查看状态:
$ bin/nutch readdb crawl_tianya/crawldb -stats
CrawlDb statistics start: crawl_tianya/crawldb
Statistics for CrawlDb: crawl_tianya/crawldb
TOTAL urls: 649
retry 0: 648
retry 1: 1
min score: 0.0
avg score: 0.0029892141
max score: 1.0
status 1 (db_unfetched): 629
status 2 (db_fetched): 12
status 3 (db_gone): 1
status 4 (db_redir_temp): 5
status 5 (db_redir_perm): 2
CrawlDb statistics: done
以上信息表明现在抓取到的url有649个,关于分值的算法具体再做了解,其就是网页重要性的依据。然后可以看到不同状态的url;抓取的12个,未抓取的629个;还有临时重定向和永久性重定向等的统计信息。
把内容输出到一个文件中进行查看:
$ bin/nutch readdb crawl_tianya/crawldb -dump crawl_tianya_out
cygpath: can't convert empty path
CrawlDb dump: starting
CrawlDb db: crawl_tianya/crawldb
CrawlDb dump: done
crawl_tianya_out文件夹下面生成两个文件.part-00000.crc文件 和 part-00000文件 可以使用文本文件程序打开part-00000文件进行查看;截取其中一个:
http://aimin_001.blog.tianya.cn/
Version: 7
Status: 4 (db_redir_temp)
Fetch time: Thu May 30 17:51:57 CST 2013
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata: Content-Type: text/html_pst_: temp_moved(13), lastModified=0: http://blog.tianya.cn/blogger/blog_main.asp?BlogID=134876
里面保存了状态,抓取的时间,修改时间,有效期,分值,指纹,头数据等详细关于抓取的内容。
使用命令查看某个具体url的信息:
$ bin/nutch readdb crawl_tianya/crawldb -url http://aimin_001.blog.tianya.cn/ 将获得与上面看到的相同的信息:
URL: http://aimin_001.blog.tianya.cn/
Version: 7
Status: 4 (db_redir_temp)
Fetch time: Thu May 30 17:51:57 CST 2013
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.01
Signature: null
Metadata: Content-Type: text/html_pst_: temp_moved(13), lastModified=0:http://blog.tianya.cn/blogger/blog_main.asp?BlogID=134876
Linkdb:与crawl的结构相同,都是hadoop的目录结构。
其命令是:
$ bin/nutch readlinkdb
cygpath: can't convert empty path
Usage: LinkDbReader <linkdb> (-dump <out_dir> | -url <url>)
-dump <out_dir> dump whole link db to a text file in <out_dir>
-url <url> print information about <url> to System.out
把linkdb内容写到某个文件
$ bin/nutch readlinkdb crawl_tianya/linkdb -dump crawl_tianya_out_linkdb
截取部分内容如下:这里面详细列出链接来源
http://apps.tianya.cn/ Inlinks:
fromUrl: http://travel.tianya.cn/ anchor: 应用
fromUrl: http://www.tianya.cn/blog/ anchor: 应用
http://a1417.oadz.com/link/C/1417/74433/bgJzPqPjy-0TzLF4JcRfwkYppO4_/p026/0/http:/activity.aoyou.com/hd/shiyi/wd/ Inlinks:
fromUrl: http://shangjia.tianya.cn/ anchor: 遨游网海岛专场热卖 直降8000元起
可以看到有的网页有多个Inlinks,这说明网页的重要性越大。和分值的确定有直接关系。比如一个网站的首页就会有很多的Inlinks。
可以使用url进行某个url信息的获取:
$ bin/nutch readlinkdb crawl_tianya/linkdb -url http://astd.tianya.cn/
fromUrl: http://game.tianya.cn/ anchor: 傲视天地
segments:
这个目录下是按时间进行分列的:设置dpeth=3,所以有3个子目录;
每个目录下有六个子目录:
Content
crawl_fetch
crawl_generate
crawl_parse
parse_data
parse_text
可以分别获取各个文件的内容,也可以整体上获取一个文件夹的内容:
命令:
$ bin/nutch readseg
Usage: SegmentReader (-dump ... | -list ... | -get ...) [general options]
* General options:
-nocontent ignore content directory
-nofetch ignore crawl_fetch directory
-nogenerate ignore crawl_generate directory
-noparse ignore crawl_parse directory
-noparsedata ignore parse_data directory
-noparsetext ignore parse_text directory
* SegmentReader -dump <segment_dir> <output> [general options]
Dumps content of a <segment_dir> as a text file to <output>.
<segment_dir> name of the segment directory.
<output> name of the (non-existent) output directory.
* SegmentReader -list (<segment_dir1> ... | -dir <segments>) [general options]
List a synopsis of segments in specified directories, or all segments in
a directory <segments>, and print it on System.out
<segment_dir1> ... list of segment directories to process
-dir <segments> directory that contains multiple segments
* SegmentReader -get <segment_dir> <keyValue> [general options]
Get a specified record from a segment, and print it on System.out.
<segment_dir> name of the segment directory.
<keyValue> value of the key (url).
Note: put double-quotes around strings with spaces.
获取Content内容:
$ bin/nutch readseg -dump crawl_tianya/segments/20130430175248 crawl_tianya_seg_content -nofetch -nogenerate -noparse -noparsedata -noparsetext
在crawl_tianya_seg_content里面会生成dump.crc和dump文件,同样dump文件可以用文本文件程序打开:里面保存的是具体的网页源码,篇幅很大,不进行列举。
获取fetch内容:
$ bin/nutch readseg -dump crawl_tianya/segments/20130430175248 crawl_tianya_seg_fetch -nocontent -nogenerate -noparse -noparsedata -noparsetext
在crawl_tianya_seg_fetch中打开文件部分如下:
Recno:: 0
URL:: http://bbs.tianya.cn/
CrawlDatum::
Version: 7
Status: 34 (fetch_retry)
Fetch time: Tue Apr 30 17:53:13 CST 2013
Modified time: Thu Jan 01 08:00:00 CST 1970
Retries since fetch: 0
Retry interval: 2592000 seconds (30 days)
Score: 0.010199999
Signature: null
Metadata: _ngt_: 1367315560115_pst_: exception(16), lastModified=0:
其余几个文件获取不一一列举;
需要搞清楚这六个文件生成的时间:
1.crawl_generate在Generator的时候生成;
2.content 、 crawl_fetch在Fetcher的时候生成;
3.crawl_parse、parse_data、parse_text在Parse segment的时候生成。
那么他们分别所代表的具体内容就可以推断了。
list列出一些统计信息:
$ bin/nutch readseg -list -dir crawl_tianya/segments
NAME GENERATED FETCHER START FETCHER END FETCHED PARSED
20130430175059 1 2013-04-30T17:51:13 2013-04-30T17:51:13 11
20130430175147 10 2013-04-30T17:51:57 2013-04-30T17:52:13 12 5
20130430175248 10 2013-04-30T17:52:55 2013-04-30T17:53:13 10 6
list列出某一个统计信息:
$ bin/nutch readseg -list crawl_tianya/segments/20130430175248
NAME GENERATED FETCHER START FETCHER END FETCHED PARSED
20130430175248 10 2013-04-30T17:52:55 2013-04-30T17:53:13 10 6
还可以使用get获得某一个具体信息显示:
$ bin/nutch readseg -get crawl_tianya/segments/20130430175248 http://shangjia.tianya.cn/
注意说明:
* SegmentReader -get <segment_dir> <keyValue> [general options]
Get a specified record from a segment, and print it on System.out.
<segment_dir> name of the segment directory.
<keyValue> value of the key (url).
其实其存储的数据结构就是一个以url作为key的map。