2012-07-14 3 views
0

crawler4j에서 함수 boolean shouldVisit(WebUrl url)을 무시하고 'true'와 'false'를 반환하여 해당 URL을 크롤링 할 수 있는지 여부를 제어 할 수 있습니다.런타임에 크롤링 될 URL 목록 제어

하지만 런타임에 URL을 추가 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까? 현재 addSeed(String url) 함수를 사용하여 프로그램 시작 부분에 start(BasicCrawler.class, numberOfCrawlers)의 URL을 추가 할 수 있으며 addSeed(String url)을 사용하여 새 URL을 추가하려고하면 오류가 발생합니다. Here은 오류 이미지입니다.

도움이 될만한 점이 있으시면 질문에 대답하는 데 프로젝트에 대한 자세한 내용이 필요하면 언제든지 알려 주시기 바랍니다.

답변

0

아마도이 기능을 구현할 수 있지만 크롤링하지 않아야하는 URL 목록에 의존해야합니다. shouldVisit의 구현은 지정된 URL이 금지 된 URL (또는 허용 된 URL) 목록에 있는지 여부를 묻고 그 결과에 따라 true 또는 false를 반환합니다.

+0

그래, 난 당신의 대답을 이해하지만 'www.facebook.com'다음 '페이스 북'의 모든 링크로 처음에 씨앗을 제공 한 경우 내 질문이었다 도메인은 함수'code' ('shouldVisit')에서 전달되며 함수의 구현에 따라 허용되지는 않지만 ('should''ll) 허용되는 반면 새로운 중간에'code' ('www.google.com')을 추가 할 수 있습니다 크롤링 할 URL 목록에서'code' (facebook)에 대한 크롤링 중입니다. 내가 너 한테 분명해? – Amit

+0

예, 내 대답은 같습니다. 업데이트 할 수있는 데이터 구조에 따라 함수의 구현을 변경해야합니다. – Gian

+0

crawler4j 사이트의 첫 페이지에있는'controller.addSeed ("http://www.ics.uci.edu/"); 예제를 보았습니까? 기본적으로 새로운 크롤링이지만, 이것이 큰 차이를 만들어내는 것을 보지 못합니까? – Gian

0

이 작업을 수행 할 수 있습니다.

public void schedule(WebURL url)을 사용하면 Frontier.java 클래스의 구성원 인 크롤러 프론티어에 URL을 추가 할 수 있습니다. 하지만이 경우에는 WebURL 유형의 URL이 필요합니다. 당신의 문자열에서 WebURL을 만들고 싶다면. CrawlController.java 클래스에있는 addSeed() (아래 코드)을보고 문자열 (url)을 WebURL로 변환 한 방법을 확인하십시오.

또한 기존 프론티어 인스턴스를 사용하십시오. 이 도움이

희망 ..

public void addSeed(String pageUrl, int docId) { 
     String canonicalUrl = URLCanonicalizer.getCanonicalURL(pageUrl); 
     if (canonicalUrl == null) { 
      logger.error("Invalid seed URL: " + pageUrl); 
      return; 
     } 
     if (docId < 0) { 
      docId = docIdServer.getDocId(canonicalUrl); 
      if (docId > 0) { 
       // This URL is already seen. 
       return; 
      } 
      docId = docIdServer.getNewDocID(canonicalUrl); 
     } else { 
      try { 
       docIdServer.addUrlAndDocId(canonicalUrl, docId); 
      } catch (Exception e) { 
       logger.error("Could not add seed: " + e.getMessage()); 
      } 
     } 

     WebURL webUrl = new WebURL(); 
     webUrl.setURL(canonicalUrl); 
     webUrl.setDocid(docId); 
     webUrl.setDepth((short) 0); 
     if (!robotstxtServer.allows(webUrl)) { 
      logger.info("Robots.txt does not allow this seed: " + pageUrl); 
     } else { 
      frontier.schedule(webUrl); //method that adds URL to the frontier at run time 
     } 
    }