시드 URL에서 데이터를 검색하고 페이지를 다운로드 할 수있는 기본 크롤러를 구현했습니다. 또한 지정된 깊이가 달성 될 때까지 동일한 시드 웹 사이트에 내 크롤러를 유지할 수 있습니다. 미리 정의 된 키워드의 최소 임계 값을 통과하는 경우에만 페이지가 다운로드되는 것처럼 크롤러에 더 많은 제한을 적용 할 수 있습니까? shouldvisit() 함수에 이러한 메소드가 있습니까?기본 크롤러 4j를 포커스 된 크롤러로 변환
답변
불행히도 당신은 크롤러의 표준 인 불가능한 제약이 있습니다. 찾으려는 키워드가 포함되어 있는지 확인하려면 페이지를 다운로드해야합니다. 대부분의 크롤러와 마찬가지로 crawler4j는 크롤링하지 않은 페이지에 대해 다운로드 한 데이터에 대해서만 작동 할 수 있습니다.이 페이지는 URL 문자열에 대해서만 알고 있지만 대부분 일부 키워드는 포함 할 수 없습니다.
public boolean shouldVisit(WebURL url)
은 실제로 당신이 결정을 내릴 수 있습니다 (원래의 라이브러리를 수정하지 않고 즉,) 유일한 공식 장소입니다 그리고 당신은 URL 주위를 기반으로해야합니다.
그러나 페이지를 다운로드하기 전에 키워드에 대해 알아야하는 이유가있을 경우 Bing과 같은 타사 웹 서비스 API를 사용하여 공개 웹 페이지를 색인하고 해당 페이지에 대한 검색 결과에 키워드가 포함되어 있는지 확인하려고 할 수 있습니다. 찾고 있습니다. 그러나 이것은 Bing과 같은 서비스가 액세스 할 수있는 공개 사이트에서만 작동합니다. Bing을 질의하는 것과 페이지를 직접 다운로드하는 것의 장단점을 비교할 필요가 있습니다. 대부분 다운로드하는 경우가 더 적합 할 것입니다.
마지막으로 생각해 보았습니다. 방금 다운로드 한 페이지를 기반으로 더 이상 링크/페이지를 다운로드하지 않는다는 것을 의미하는 경우 (예 : X 페이지에 올바른 키워드가 없으므로 페이지 X에서 더 이상 링크를 방문하지 마십시오. 따라서이 페이지의 링크는 좋지 않은 것으로 간주됩니다.). 그런 경우가 있다면 당신은 데이터베이스 같은 일부 중앙 데이터 저장소에서 부모 URL에 액세스 할 수 있고 당신이 그것을 방문해야하는지 확인하려는 :
public boolean shouldVisit(WebURL url)
는 중앙 데이터 저장소에 상기 정보를 추가 제공 :
public void visit(Page page)
방법. 크롤러가 콘텐츠를 가져와야하는지 여부를 결정하는 최종 방법은 shouldVisit입니다. 기본적으로 여기에 제공된 URL 정보 또는 사용자가 채워 넣은 데이터 저장소처럼 사용하려고 시도하는 다른 정보 또는 타사 API 만 있으면됩니다. 마지막 경고 중 하나는 중앙 데이터 저장소 또는 타사 API를 사용하는 경우 crawler4j가 다중 스레드이므로 shouldVisit 메서드에서 아무 것도 액세스 할 때 고려해야한다는 것입니다.
고마워 요르단! 나는 옵션을 남기지 않았지만 웹 페이지를 다운로드하기 위해 포인트 크롤러와 입력 웹 페이지 사이에 간격이 있으면 다운로드 할 수 있다고 생각했습니다. 스레드가 웹 페이지를 스캔하여 내 요구 사항을 충족하는 경우에만 페이지를 다운로드 할 수있는 경우 (내 로컬 컴퓨터의 공간 절약을 목표로 함) –