2013年1月20日日曜日

Nutchでクローリング(StepByStep)

以前Nutchでクローリングした際は、crawlでクロールのプロセスを自動的に順次実行させた。
今回は、プロセスを手動で順次実行してみる。
ちょっと特殊なのはCassandraにストアしていること。
  • さくらVPS
  • CentOS 6.2
  • OpenJDK 1.6.0_24
  • Apache Nutch 2.1
  • Apache Cassandra 1.2
  1. Inject
  2. クローリングの始点をデータベース、つまり今回はCassandraに、登録する。
    Apacheのコミュニティサイトを3つをクロール始点としてファイルに登録。
    # pwd
    /opt/apache-nutch-2.1
    
    # cat urls/seed.txt
    http://nutch.apache.org/
    http://lucene.apache.org/
    http://cassandra.apache.org/
    
    # nutch inject urls/
    InjectorJob: starting
    InjectorJob: urlDir: urls
    <省略>
    InjectorJob: finished
    
    確かめる。
    # nutch readdb -dump ./out_dir
    
    # cat out_dir/part-r-00000
    http://cassandra.apache.org/ key: org.apache.cassandra:http/
    baseUrl: null
    status: 0 (null)
    fetchInterval: 2592000
    fetchTime: 1358584769397
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: (null)
    parseStatus: (null)
    title: null
    score: 1.0
    markers: {dist=0, _injmrk_=y}
    metadata _csh_ :  ?�
    
    http://lucene.apache.org/ key: org.apache.lucene:http/
    baseUrl: null
    status: 0 (null)
    fetchInterval: 2592000
    fetchTime: 1358584769397
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: (null)
    parseStatus: (null)
    title: null
    score: 1.0
    markers: {dist=0, _injmrk_=y}
    metadata _csh_ :  ?�
    
    http://nutch.apache.org/ key: org.apache.nutch:http/
    baseUrl: null
    status: 0 (null)
    fetchInterval: 2592000
    fetchTime: 1358584769397
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: (null)
    parseStatus: (null)
    title: null
    score: 1.0
    markers: {dist=0, _injmrk_=y}
    metadata _csh_ :  ?�
    
    たしかに3つのサイトが登録されている。
  3. Generate
  4. クロール対象の選択。
    # nutch generate
    <省略>
    
    そして確認。readdb -dumpの出力先ディレクトリは、存在するとエラーになる。ここでは同じディレクトリにするので最初に消しておく。
    # rm -rf out_dir
    
    # nutch readdb -dump ./out_dir
    <省略>
    
    # cat out_dir/part-r-00000
    http://cassandra.apache.org/ key: org.apache.cassandra:http/
    baseUrl: null
    status: 0 (null)
    fetchInterval: 2592000
    fetchTime: 1358584769397
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: (null)
    parseStatus: (null)
    title: null
    score: 1.0
    markers: {dist=0, _injmrk_=y, _gnmrk_=1358585856-208596666}
    metadata _csh_ :  ?�
    
    http://lucene.apache.org/ key: org.apache.lucene:http/
    baseUrl: null
    status: 0 (null)
    fetchInterval: 2592000
    fetchTime: 1358584769397
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: (null)
    parseStatus: (null)
    title: null
    score: 1.0
    markers: {dist=0, _injmrk_=y, _gnmrk_=1358585856-208596666}
    metadata _csh_ :  ?�
    
    http://nutch.apache.org/ key: org.apache.nutch:http/
    baseUrl: null
    status: 0 (null)
    fetchInterval: 2592000
    fetchTime: 1358584769397
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: (null)
    parseStatus: (null)
    title: null
    score: 1.0
    markers: {dist=0, _injmrk_=y, _gnmrk_=1358585856-208596666}
    metadata _csh_ :  ?�
    
    markersのところが追記されているが、大きな変化はなし。
    Generate実行時に-topNオプションを付けると対象サイトをしぼれる。
    # nutch generate -topN 1
    <省略>
    
    # nutch readdb -dump out_dir
    
    # cat out_dir/part-r-00000
    http://cassandra.apache.org/ key: org.apache.cassandra:http/
    <省略>
    markers: {dist=0, _injmrk_=y, _gnmrk_=1358586890-1155183335}
    metadata _csh_ :  ?�
    
    http://lucene.apache.org/ key: org.apache.lucene:http/
    <省略>
    markers: {dist=0, _injmrk_=y}
    metadata _csh_ :  ?�
    
    http://nutch.apache.org/ key: org.apache.nutch:http/
    <省略>
    markers: {dist=0, _injmrk_=y}
    metadata _csh_ :  ?�
    
    最初のサイトに対してのみ、markersに追記がなされている。
  5. Fetch
  6. 対象サイトのデータを取得する。
    fetchの引数には、generate実行時の最後に出力されるBatch Idを指定する。
    # nutch fetch 1358585856-208596666
    <省略>
    
    Cassandraをのぞくと、確かにコンテンツが格納されている模様。
    ColumnFamily「f」に入っている。
    # cassandra-cli
    Connected to: "Cassandra Cluster" on 127.0.0.1/9160
    Welcome to Cassandra CLI version 1.2.0
    
    Type 'help;' or '?' for help.
    Type 'quit;' or 'exit;' to quit.
    
    [default@unknown] use webpage;
    
    [default@webpage] list f;
    Using default limit of 100
    Using default column limit of 100
    -------------------
    RowKey: 6f72672e6170616368652e6e757463683a687474702f
    => (column=bas, value=http://nutch.apache.org/, timestamp=1358588578114000)
    => (column=cnt, value=
    
    
    
    
    
    
    <省略>
    
    
    
    , timestamp=1358588578191000)
    => (column=fi, value=2592000, timestamp=1358588024031000)
    => (column=pts, value=1358588021620, timestamp=1358588578188001)
    => (column=s, value=1.0, timestamp=1358588024032000)
    => (column=st, value=2, timestamp=1358588578187000)
    => (column=ts, value=1358588574261, timestamp=1358588578188000)
    => (column=typ, value=application/xhtml+xml, timestamp=1358588578192000)
    
    3 Rows Returned.
    Elapsed time: 27 msec(s).
    [default@webpage]
    
  7. Parse
  8. 次は、取得したデータの解析・情報抽出。
    # nutch parse 1358588033-175013002
    <省略>
    
    CassandraのColumnFamily「p」に解析されたデータが格納される。
    [default@webpage] list sc;
    Using default limit of 100
    Using default column limit of 100
    -------------------
    RowKey: 6f72672e6170616368652e6e757463683a687474702f
    => (super_column=h,
         (column=Accept-Ranges, value=bytes, timestamp=1358588578175000)
         (column=Connection, value=close, timestamp=1358588578168000)
         (column=Content-Encoding, value=gzip, timestamp=1358588578162000)
         (column=Content-Length, value=8631, timestamp=1358588578171000)
         (column=Content-Type, value=text/html; charset=utf-8, timestamp=1358588578169000)
         (column=Date, value=Sat, 19 Jan 2013 09:42:53 GMT, timestamp=1358588578173000)
         (column=ETag, value="84c4-4d0994769b476-gzip", timestamp=1358588578166000)
         (column=Last-Modified, value=Tue, 11 Dec 2012 20:10:53 GMT, timestamp=1358588578172000)
         (column=Server, value=Apache/2.4.3 (Unix) OpenSSL/1.0.0g, timestamp=1358588578176000)
         (column=Vary, value=Accept-Encoding, timestamp=1358588578178000))
    => (super_column=mk,
         (column=__prsmrk__, value=1358588033-175013002, timestamp=1358590210616000)
         (column=_ftcmrk_, value=1358588033-175013002, timestamp=1358590210613000)
         (column=_gnmrk_, value=1358588033-175013002, timestamp=1358590210614000)
         (column=_injmrk_, value=y, timestamp=1358590210611000)
         (column=dist, value=0, timestamp=1358590210610000))
    => (super_column=mtdt,
         (column=_csh_, value=, timestamp=1358590006461000))
    => (super_column=ol,
         (column=http://lucene.apache.org/java/, value=Lucene, timestamp=1358590210557000)
         (column=http://lucene.apache.org/solr/, value=Solr, timestamp=1358590210581000)
         (column=http://nutch.apache.org/, value=Nutch, timestamp=1358590210606000)
    <省略>
    developers and community members hang out in the #cassandra channel on irc.freenode.net . If you are new to IRC, you can use a web-based client . Dead Trees Cassandra High Performance Cookbook , by Ed Capriolo. Covers Cassandra 0.8. Also on Amazon . Copyright © 2009 The Apache Software Foundation . Licensed under the Apache License, Version 2.0. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. Privacy Policy ., timestamp=1358590210680000)
    => (column=sig, value=�#)�2s��D��j�, timestamp=1358590210678000)
    => (column=t, value=The Apache Cassandra Project, timestamp=1358590210679000)
    
    3 Rows Returned.
    Elapsed time: 13 msec(s).
    
  9. UpdateDB
  10. Parseでリンクも抽出しており、これを次のクロールの候補としてデータベースに反映させる。
    # nutch updatedb
    
    Cassandraをのぞくとデータ件数が45に増えている。
    [default@webpage] list f;
    <省略&pt;
    => (column=ts, value=1358590521209, timestamp=1358590521282000)
    
    45 Rows Returned.
    Elapsed time: 80 msec(s).
    
    readdbでも確認してみる。
    # cat ./out_dir/part-r-00000 
    http://cassandra.apache.org/ key: org.apache.cassandra:http/
    baseUrl: http://cassandra.apache.org/
    status: 2 (status_fetched)
    fetchInterval: 2592000
    fetchTime: 1363772574261
    prevFetchTime: 1358588021620
    retries: 0
    modifiedTime: 0
    protocolStatus: SUCCESS, args=[]
    parseStatus: success/ok (1/0), args=[]
    title: The Apache Cassandra Project
    score: 1.0
    signature: 14efbfbd2329efbfbd3273efbfbdefbfbd44efbfbdefbfbd6aefbfbd000000
    markers: {dist=0, _injmrk_=y, _updmrk_=1358588033-175013002, _gnmrk_=1358588033-175013002, _ftcmrk_=1358588033-175013002, __prsmrk__=1358588033-175013002}
    metadata _csh_ :  
    
    http://cassandra.apache.org/download/ key: org.apache.cassandra:http/download/
    baseUrl: null
    status: 1 (status_unfetched)
    fetchInterval: 2592000
    fetchTime: 1358590521209
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: UNKNOWN_CODE_0, args=[]
    parseStatus: notparsed/ok (0/0), args=[]
    title: null
    score: 0.0
    markers: {dist=1}
    metadata _csh_ :  
    
    http://cassandra.apache.org/privacy.html key: org.apache.cassandra:http/privacy.html
    baseUrl: null
    status: 1 (status_unfetched)
    fetchInterval: 2592000
    fetchTime: 1358590521210
    prevFetchTime: 0
    retries: 0
    modifiedTime: 0
    protocolStatus: UNKNOWN_CODE_0, args=[]
    parseStatus: notparsed/ok (0/0), args=[]
    title: null
    score: 0.0
    markers: {dist=1}
    metadata _csh_ :  
    
    http://lucene.apache.org/ key: org.apache.lucene:http/
    baseUrl: http://lucene.apache.org/
    status: 2 (status_fetched)
    fetchInterval: 2592000
    fetchTime: 1363772574561
    prevFetchTime: 1358588021620
    retries: 0
    modifiedTime: 0
    protocolStatus: SUCCESS, args=[]
    parseStatus: success/ok (1/0), args=[]
    title: Apache Lucene - Welcome to Apache Lucene
    score: 1.0
    signature: efbfbdefbfbdefbfbdefbfbd67efbfbd74efbfbd5cefbfbdefbfbd21413befbfbdefbfbd0000000000000000000000000000000000000000000000000000000000000000000000
    markers: {dist=0, _injmrk_=y, _updmrk_=1358588033-175013002, _gnmrk_=1358588033-175013002, _ftcmrk_=1358588033-175013002, __prsmrk__=1358588033-175013002}
    metadata _csh_ :  
    
  11. おさらい
  12. 再度以下を1巡行うと、
    # nutch generate -topN 10
    <省略>
    GeneratorJob: generated batch id: 1358607691-1967365662
    # nutch fetch 1358607691-1967365662
    # nutch parse 1358607691-1967365662
    # nutch updatedb
    
    ColumnFamily「p」が13件に、ColumnFamily「f」が125件となった。

おわり

0 件のコメント:

コメントを投稿