소개
웹 크롤러는 웹페이지의 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에 추가합니다.
- Inject: 크롤링을 시작할 웹 페이지가 저장된 파일을 CrawlDB에 저장합니다.
Crawling Process
크롤링 프로세스 간단 정리
- Apache Nutch Binary 파일 다운
- Seed 파일 생성
- Apache Nutch 최소 설정 적용
- shell script를 활용한 크롤링
- 사람이 보기 편한 파일로 변환
크롤링 프로세스 세부 정리
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 |
---|