DispositionProcessors

  • 실행할 DispositionChain의 Processor collection 리스트

기존 설정 값

 <!-- now, processors are assembled into ordered DispositionChain bean -->
 <bean id="dispositionProcessors" class="org.archive.modules.DispositionChain">
  <property name="processors">
   <list>
    <!-- write to aggregate archival files... -->
    <ref bean="warcWriter"/>
    <!-- ...send each outlink candidate URI to CandidateChain, 
         and enqueue those ACCEPTed to the frontier... -->
    <ref bean="candidates"/>
    <!-- ...then update stats, shared-structures, frontier decisions -->
    <ref bean="disposition"/>
    <!-- <ref bean="rescheduler" /> -->
   </list>
  </property>
 </bean>
  • [process 진행 과정 설명]
    1. crawling 된 data를 warc 파일로 저장한다. -> warcWriter
    2. 발견된 outlink들을 CandidateChain으로 보내고 queue에 ACCEPT 형식으로 push한다. -> candidates
    3. 하나의 routine이 끝났으므로 상태를 재정비함 -> disposition


Posted by Righ
,

Disposition

  • frontier 배치에 영향을 주는 값을 매기는 작업을 수행한다. 이때 fetch에 의해 변경된 정보들도 업데이트한다.

기본 설정 값

 <bean id="disposition" class="org.archive.crawler.postprocessor.DispositionProcessor">
  <!-- <property name="delayFactor" value="5.0" /> -->
  <!-- <property name="minDelayMs" value="3000" /> -->
  <!-- <property name="respectCrawlDelayUpToSeconds" value="300" /> -->
  <!-- <property name="maxDelayMs" value="30000" /> -->
  <!-- <property name="maxPerHostBandwidthUsageKbSec" value="0" /> -->
 </bean>
  • [property에 대한 설명]
    1. delayFactor : fetch 후 같은 서버에 재접촉을 하기 전까지 기다릴 시간. 마지막 fetch가 경과한 시간의 multiples.
    2. minDelayMs : 하나의 process가 끝난 후 같은 서버에 재접촉을 하기 전까지 기다릴 시간. 위의 multiple 값을 무시한다.
    3. respectCrawlDelayUpToSeconds : site의 robots.txt에 주어진 'Crawl-Delay' 값을 신뢰할 시간 설정.
    4. maxDelayMs : 이 값보다 오래는 기다리지 않는다. delayFactor 값 무시한다.
    5. maxPerHostBandwidthUsageKbSec : 하나의 Host 당 사용할 최대 대역폭 설정


Posted by Righ
,

Candidates

  • 두가지 역할을 하는 processor이다.
    1. 발견된 후보 링크들을 CandidateChain으로 보내면서 non-negative status code로 스케줄링 ( ACCEPT)
    2. seed에서 리다이렉트 되는 URI 같은 새로 발견한 seed들을 처리한다. -> scope 확장과 같은 처리

기존 설정 값

 <bean id="candidates" class="org.archive.crawler.postprocessor.CandidatesProcessor">
  <!-- <property name="seedsRedirectNewSeeds" value="true" /> -->
  <!-- <property name="processErrorOutlinks" value="false" /> -->
 </bean>
  • [property 에 대한 설명]
    1. seedRedirectNewSeeds : seed에서 리다이렉션 되어 찾아진 URL들(return code 301 또는 302)을 seed와 같이 취급한다. 단, 이 경우 seed로 부터의 hop count 가 5이하여야 한다.
    2. processErrorOutlinks : error code를 리턴한 outlink들을 ( <200 && >= 400 ) CandidateChain으로 보낼지 말지의 여부.


Posted by Righ
,

WarcWriter

  • WARC/1.0 요구사항에 따라 crawl 데이터들을 warc(Web ARChive) 파일로 저장한다.
    warc 포맷은 InternetArchive's ARC File Format의 개정 포맷이며 전통적으로 web crawl을 저장하기 위해 사용된다.

기존 설정 값

<bean id="warcWriter" class="org.archive.modules.writer.WARCWriterProcessor">
  <!-- <property name="compress" value="true" /> -->
  <!-- <property name="prefix" value="WEB" /> -->
  <!-- <property name="suffix" value="${HOSTNAME}" /> -->
  <!-- <property name="maxFileSizeBytes" value="1000000000" /> -->
  <!-- <property name="poolMaxActive" value="1" /> -->
  <!-- <property name="MaxWaitForIdleMs" value="500" /> -->
  <!-- <property name="skipIdenticalDigests" value="false" /> -->
  <!-- <property name="maxTotalBytesToWrite" value="0" /> -->
  <!-- <property name="directory" value="${launchId}" /> -->
  <!-- <property name="storePaths">
        <list>
         <value>warcs</value>
        </list>
       </property> -->
  <!-- <property name="template" value="${prefix}-${timestamp17}-${serialno}-${heritrix.pid}~${heritrix.hostname}~${heritrix.port}" /> -->
  <!-- <property name="writeRequests" value="true" /> -->
  <!-- <property name="writeMetadata" value="true" /> -->
  <!-- <property name="writeRevisitForIdenticalDigests" value="true" /> -->
  <!-- <property name="writeRevisitForNotModified" value="true" /> -->
  <!-- <property name="startNewFilesOnCheckpoint" value="true" /> -->
  • [property에 대한 설명]
    1. compress : warc 파일의 압축 여부 결정 ( 압축 포맷은 gzip )
    2. prefix : warc 파일의 prefix 결정
    3. suffix : warc 파일의 suffix 결정
    4. maxFileSizeBytes : warc 파일 한 개의 최대 사이즈. 이 값을 넘어가면 파일을 분할하여 저장한다.
    5. poolMaxActive : file과의 connection을 관장하는 pool의 최대 개수. 크롤링 중간에 변경 불가능하다.
    6. MaxWaitForIdleMs : 추가적으로 instance를 생성하기 전에 idle writer를 기다리는 최대 시간
    7. skipIdenticalDigests : 이전 fetch의 identical content digest값이 동일한 값을 가지고 있을 때, 이번 fetch의 기록을 생략할 것인지에 대한 여부
    8. maxTotalBytesToWrite : 전체 warc 파일의 제한 사이즈. 이 값을 초과 하면 크롤링도 멈춘다. 0은 no limit를 의미한다.
    9. directory : warc 파일의 기본 path 설정
    10. storePaths : warc 파일을 저장할 경로. 만약 2개 이상의 경로를 설정할 경우 round-robin 방식으로 file들을 저장한다. 경로의 root는 directory에서 설정한 path.
    11. template : warc 파일 이름의 기본 형식
    12. writeRequests : reqeust 타입 기록을 저장할 것인지 여부.
      저장 값 예시 :

      WARC/1.0 WARC-Type: request WARC-Target-URI: http://crawled.com/robots.txt WARC-Date: 2016-07-25T08:01:19Z WARC-Concurrent-To: <urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx> WARC-Record-ID: <urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx> Content-Type: application/http; msgtype=request Content-Length: 243 GET /robots.txt HTTP/1.0 User-Agent: Mozilla/5.0 (compatible; heritrix/3.2.0-SNAPSHOT-20140108-2049 +http://crawling.co.kr) Connection: close Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Host: crawled.kr

    13. writeMetadata : metadata 타입 기록을 저장할 것인지 여부.
      저장 값 예시 :
      WARC/1.0
      WARC-Type: metadata
      WARC-Target-URI: http://crawled.kr/robots.txt
      WARC-Date: 2016-07-25T08:01:19Z
      WARC-Concurrent-To: <urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>
      WARC-Record-ID: <urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>
      Content-Type: application/warc-fields
      Content-Length: 209
      
      force-fetch:
      via: http://crawled.kr/
      hopsFromSeed: P
      sourceTag: http://crawled.kr/
      fetchTimeMs: 7
      charsetForLinkExtraction: ISO-8859-1
      outlink: http://crawled.kr/favicon.ico I =INFERRED_MISC
      
    14. writeRevisitForIdenticalDigests : 이전 fetch 기록이 동일한 content digest를 가지고 있을 때 revisit 타입의 기록을 저장할 것인지에 대한 여부.
    15. writeRevisitForNotModified : 304-Not Modified 응답을 받았을 경우 revisit 타입의 기록을 저장할 것인지에 대한 여부.
    16. startNewFilesOnCheckpoint : checkpoint에서 file을 끝내고 새로운 파일을 다시 쓸 것인지에 대한 여부.


Posted by Righ
,

FetchProcessors

  • 실행시킬 processor들의 컬렉션

기존 설정 값

 <bean id="fetchProcessors" class="org.archive.modules.FetchChain">
  <property name="processors">
   <list>
    <!-- re-check scope, if so enabled... -->
    <ref bean="preselector"/>
    <!-- ...then verify or trigger prerequisite URIs fetched, allow crawling... -->
    <ref bean="preconditions"/>
    <!-- ...fetch if DNS URI... -->
    <ref bean="fetchDns"/>
    <!-- <ref bean="fetchWhois"/> -->
    <!-- ...fetch if HTTP URI... -->
    <ref bean="fetchHttp"/>
    <!-- ...extract outlinks from HTTP headers... -->
    <ref bean="extractorHttp"/>
    <!-- ...extract outlinks from HTML content... -->
    <ref bean="extractorHtml"/>
    <!-- ...extract outlinks from CSS content... -->
    <ref bean="extractorCss"/>
    <!-- ...extract outlinks from Javascript content... -->
    <ref bean="extractorJs"/>
    <!-- ...extract outlinks from Flash content... -->
    <ref bean="extractorSwf"/>
   </list>
  </property>
 </bean>
  • [process 진행 과정 설명]
    1. scope를 재 체크 한다. -> preselector
    2. URI fetch 하기 전 사전 조건을 확인 혹은 trigger 후 크롤링 허용한다. -> preconditions
    3. DNS URI fetch 한다. -> fetchDns
    4. HTTP URI를 fetch 한다. -> fetchHttp
    5. HTTP header로 부터 outlink 들을 추출한다. -> extractorHTTP
    6. HTML content로 부터 outlink 들을 추출한다. -> extractorHTML
    7. Css content로 부터 outlink 들을 추출한다. -> extractorCSS
    8. Javascript content로 부터 outlink 들을 추출한다. -> extractorJS
    9. Flash content로 부터 outlink 들을 추출한다. -> extractorSwf


Posted by Righ
,