Nutch抓取数据内容的详解

命令:$ 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。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值