소개

웹 크롤러는 웹페이지의 link를 방문해 HTML 데이터와 link를 저장하는 작업을 반복해가며 웹 전반을 탐색하는 애플리케이션입니다.

Apache Nutch는 Open Source Web Crawler 중 하나입니다. Apache Nutch는 Apache Hadoop Cluster에서 동작하는 Deploy Mode와 간단 수집 및 테스트를 위한 Single Mode가 있습니다. 이 글에선 Ntuch Process를 간단히 설명하고 Single Mode로 크롤링을 하는 방법을 공유합니다.

 

실행 환경은 아래와 같습니다

  • Apache Nutch 1.18
  • Ubuntu 20.04

Nutch Process

  • Apache Nutch는 5가지 Main Process가 반복되며 진행됩니다.
    • Inject: 크롤링을 시작할 웹 페이지가 저장된 파일을 CrawlDB에 저장합니다.
      • CrawlDB: Apache Nutch가 웹페이지를 관리하기 위해 Metadata를 저장하는 DB
    • Generate: CrawlDB에 저장된 URL 중 1 cycle에 크롤링할 N개의 URL을 추출합니다.
    • Fetch: Generated된 웹페이지를 방문하여 HTML 원문을 저장합니다.
    • Parse: Fetched된 HTML 원문에서 text, 메타데이터, 링크를 추출한 후 나누어 저장합니다.
    • DBUpdate: parsed된 metadata와 link를 CrawlDB에 추가합니다.

Crawling Process

크롤링 프로세스 간단 정리

  1. Apache Nutch Binary 파일 다운
  2. Seed 파일 생성
  3. Apache Nutch 최소 설정 적용
  4. shell script를 활용한 크롤링
  5. 사람이 보기 편한 파일로 변환

크롤링 프로세스 세부 정리

1. Apache Nutch 홈페이지를 방문하여 Apache Nutch Binary 버전을 다운로드 한 후 적당한 위치에 압축을 풉니다.

    http://nutch.apache.org/downloads.html

 

Apache Nutch™ -

Nutch Downloads Your primary resource for all official Nutch releases

nutch.apache.org

 

2. Seed URL, CrawlDB, 크롤링 결과 파일 등을 저장할 폴더를 생성합니다. 저는 data 폴더를 생성하였습니다.

 

 

3. data 폴더 내 seed 폴더를 생성한 후 seed.txt 파일 내 테스트용 URL을 저장합니다. 저는 Apache nutch 메인 페이지 url을 아래와 같이 넣었습니다.

 

 

 

 

4. 크롤링을 하기 위한 최소 설정을 위해 Nutch가 설치된 폴더 내 conf/nutch-site.xml을 아래와 같이 수정합니다. http.agent.name은 Apache Nutch를 사용하기 위해 요구되는 최소 설정입니다. 기타 설정은 conf/nutch-default.xml을 확인한 후 nutch-site.xml에 변경사항을 추가하는 방법으로 적용 가능합니다.

 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
	<property>
	  <name>http.agent.name</name>
	  <value>test-crawler</value>
	  <description>HTTP 'User-Agent' request header. MUST NOT be empty - 
	  please set this to a single word uniquely related to your organization.

	  NOTE: You should also check other related properties:

	    http.robots.agents
	    http.agent.description
	    http.agent.url
	    http.agent.email
	    http.agent.version

	  and set their values appropriately.

	  </description>
	</property>
</configuration>

 

5. 크롤링을 하기 위해 Nutch가 제공하는 shell script를 확인합니다. Nutch 설치 폴더에서 bin/crawl을 아래와 같이 실행하여 명령어를 확인합니다.

 

6. bin/crawl -s <seed_dir> <crawl_dir> <num_rounds>를 아래와 같이 알맞게 입력하여 크롤링을 3회 실행합니다. 실행 시 아래 이미지와 같이 크롤링 실행 현황을 볼 수 있습니다. (3회만으로도 상당한 시간이 소요되니 테스트로 2~3회만 진행하세요)

bin/crawl -s data/seed data/crawl 3

 

7. 크롤링 결과가 저장된 data/crawl 폴더를 확인하면 사람이 알아 보기 어려운 형태로 저장되어 있습니다. 사람이 보기 편한 파일로 변경하는 기능으로 데이터를 변환합니다.

 

우선 nutch가 제공하는 다양한 기능을 확인하기 위해 nutch 설치 폴더에서 bin/nutch 명령어를 실행합니다.

 

이 중 dump가 data를 보기 편한 형태로 변환시켜줍니다. 아래와 같이 bin/nutch dump를 통해 명령어를 확인한 후 outputDir와 segmentDir를 알맞게 넣고 실행합니다.

bin/nutch dump -outputDir data/output -segment data/crawl/segments/

 

 

8. 결과가 저장된 data/ouput 폴더를 확인 합니다. json 파일은 URL과 HTML 저장 위치를 key value 값으로 가지고 있습니다. 특정 폴더에 들어가 HTML 파일을 확인할 수 있습니다.

 

{
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/f7/8d/f2fa63bd7a3aca63841eed4cd10fb519_SolrCloud.html":"https://cwiki.apache.org/confluence/display/solr/SolrCloud",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/de/94/ddf78b1fe5c268d59fd62bc745815b92_.html":"https://issues.apache.org/jira/browse/NUTCH/",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/59/89/5268b9b09193b68d8b7bada89c63c8e3_Becoming+A+Nutch+Developer.html":"https://cwiki.apache.org/confluence/display/NUTCH/Becoming+A+Nutch+Developer",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/e5/c1/e689627f55219bf2c6b7736c191aa55b_.html":"https://lucene.apache.org/",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/66/99/6b7bde9266afcb22980910d290d779db_solr.html":"https://lucene.apache.org/solr",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/ee/6f/e223c3dceeb6a4bd69de0cd4fa1ad080_.html":"https://accumulo.apache.org/",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/e6/24/e3fb513f6f0e50ea23896d884f9b59a9_nutch11.html":"https://s.apache.org/nutch11",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/02/57/0c1e6f9e2bcec9145de0653c778f0499_nutch_2.3":"https://s.apache.org/nutch_2.3",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/79/33/7b8095a69891f4ae363a13dd3e1d9944_.html":"https://gora.apache.org/",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/3f/bc/36f533cefea9e156bb7c181ec203d151_TheASF.html":"https://twitter.com/TheASF",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/50/26/5b987dde0da79d7f2e3f22b46437f514_bot.html":"http://nutch.apache.org/bot.html",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/5e/96/5e0ec8a1e0ccd04c9bcd902762d1de6d_FAQ.html":"https://cwiki.apache.org/confluence/display/NUTCH/FAQ",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/1f/2e/18017381fc3a1a5326279380ead7b16a_lqara.html":"https://s.apache.org/lqara",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/b4/eb/bc624e1b49e29870ef095819bb0e977a_mailing_lists.html":"http://nutch.apache.org/mailing_lists.html",
"/home/mech2cs/Downloads/nutch/apache-nutch-1.18/data/output/1b/e5/12ec6e48b752caf9ec09492c55daaec5_CHANGES.txt":"https://apache.org/dist/nutch/1.17/CHANGES.txt"}

 

'아파치 너치(Apache Nutch)' 카테고리의 다른 글

Web Crawler의 정의 및 Apache Nutch 구조  (0) 2021.06.29

+ Recent posts