자바로 웹 스크래핑
좋은 웹 스크래핑 Java 기반 API를 찾을 수 없습니다. 스크랩해야하는 사이트는 API도 제공하지 않습니다. 일부를 사용하여 모든 웹 페이지를 반복 pageID
하고 DOM 트리에서 HTML 제목 / 기타 항목을 추출하고 싶습니다 .
웹 스크래핑 외에 다른 방법이 있습니까?
jsoup
제목을 추출하는 것은 어렵지 않으며 많은 옵션이 있습니다. 여기 Stack Overflow에서 " Java HTML 파서 " 를 검색하십시오 . 그들 중 하나는 Jsoup 입니다.
페이지 구조를 알고 있으면 DOM을 사용하여 페이지를 탐색 할 수 있습니다. http://jsoup.org/cookbook/extracting-data/dom-navigation을 참조하십시오.
좋은 라이브러리이고 지난 프로젝트에서 사용했습니다.
가장 좋은 방법은 Selenium Web Driver를 사용하는 것입니다.
- 코더에게 시각적 피드백을 제공합니다 (스크랩이 작동 중인지 확인하고 중지되는 위치 확인).
- 사용하는 브라우저를 직접 제어하므로 정확하고 일관됩니다.
느린. HtmlUnit과 같은 웹 페이지를 공격하지는 않지만 때로는 너무 빨리 공격하고 싶지 않습니다.
Htmlunit은 빠르지 만 Javascript 및 AJAX를 처리하는 데는 끔찍합니다.
HTMLUnit 은 웹 스크래핑을 수행하는 데 사용할 수 있으며 페이지 호출, 양식 작성 및 제출을 지원합니다. 내 프로젝트에서 이것을 사용했습니다. 웹 스크래핑을위한 좋은 자바 라이브러리입니다. 자세한 내용은 여기를 참조하십시오.
mechanize for Java는 이에 적합하며 Wadjy Essam이 언급했듯이 HMLT에 JSoup을 사용합니다. mechanize는 탐색, 양식 제출 및 페이지 스크래핑을 지원하는 단계적 HTTP / HTML 클라이언트입니다.
http://gistlabs.com/software/mechanize-for-java/ (및 GitHub 여기 https://github.com/GistLabs/mechanize )
또한이 소풍 자바 웹 스크래핑 및 JSON 쿼리 - http://jaunt-api.com
TagSoup, HTMLCleaner 또는 NekoHTML과 같은 HTML 파서를 살펴보십시오.
jwht-scrapper를 살펴볼 수 있습니다 !
이것은 개발자가 웹 스크래퍼에서 기대할 수있는 모든 기능을 갖춘 완전한 스크래핑 프레임 워크입니다.
- 프록시 지원
- 캡차 등을 감지하는 경고 표시 지원
- 기능을 따르는 복잡한 링크
- 멀티 스레딩
- 필요한 경우 다양한 폐기 지연
- 회전하는 사용자 에이전트
- 요청 자동 재시도 및 HTTP 리디렉션 지원
- HTTP 헤더, 쿠키 및 기타 지원
- GET 및 POST 지원
- 주석 구성
- 세부 스크래핑 메트릭
- 스크래퍼 클라이언트의 비동기 처리
- HTML을 POJO에 매핑하는 jwht-htmltopojo 모든 기능을 갖춘 프레임 워크
- 사용자 정의 입력 형식 처리 및 내장 JSON-> POJO 매핑
- 완전한 예외 처리 제어
- log4j를 사용한 자세한 로깅
- POJO 주입
- 사용자 지정 처리 후크
- 사용하기 쉽고 잘 문서화 된 API
그것은 (jwht-htmltopojo) [ https://github.com/whimtrip/jwht-htmltopojo ) lib 와 함께 작동하며 여기에서 다른 여러 사람들이 언급 한 Jsoup을 사용합니다.
그들은 함께 HTML을 POJO에 직접 매핑하고 고전적인 스크래핑 문제를 단 몇 분 만에 우회하는 멋진 스크래퍼를 구축하는 데 도움이 될 것입니다!
여기에있는 사람들에게 도움이되기를 바랍니다!
면책 조항, 나는 그것을 개발 한 사람입니다. 귀하의 의견을 알려주십시오!
웹 스크레이퍼를 사용하면 웹 페이지에서 유용한 콘텐츠를 추출하고 적용 가능한 형식으로 변환 할 수 있습니다.
WebScrap ws= new WebScrap();
//set your extracted website url
ws.setUrl("http://dasnicdev.github.io/webscrap4j/");
//start scrap session
ws.startWebScrap();
이제 웹 스크랩 핑 세션이 시작되고 webscrap4j 라이브러리를 사용하여 Java에서 데이터를 스크랩하거나 추출 할 준비가되었습니다 .
제목 :
System.out.println("-------------------Title-----------------------------");
System.out.println(ws.getSingleHTMLTagData("title"));
태그 라인 :
System.out.println("-------------------Tagline-----------------------------");
System.out.println(ws.getSingleHTMLScriptData("<h2 id='project_tagline'>", "</h2>"));
모든 앵커 태그의 경우 :
System.out.println("-------------------All anchor tag-----------------------------");
al=ws.getImageTagData("a", "href");
for(String adata: al)
{
System.out.println(adata);
}
이미지 데이터의 경우 :
System.out.println("-------------------Image data-----------------------------");
System.out.println(ws.getImageTagData("img", "src"));
System.out.println(ws.getImageTagData("img", "alt"));
Ul-Li 데이터 :
System.out.println("-------------------Ul-Li Data-----------------------------");
al=ws.getSingleHTMLScriptData("<ul>", "</ul>","<li>","</li>");
for(String str:al)
{
System.out.println(str);
}
전체 소스 코드는이 튜토리얼을 확인하십시오 .
많은 양의 페이지 또는 데이터 스크랩을 자동화하려면 Gotz ETL을 사용해보십시오 .
실제 ETL 도구처럼 완전히 모델 구동됩니다. 데이터 구조, 작업 워크 플로 및 스크랩 할 페이지는 일련의 XML 정의 파일로 정의되며 코딩이 필요하지 않습니다. 쿼리는 JSoup과 함께 선택기를 사용하거나 HtmlUnit과 함께 XPath를 사용하여 작성할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/3202305/web-scraping-with-java
'developer tip' 카테고리의 다른 글
WPF 확인란 바인딩 (0) | 2020.10.29 |
---|---|
리플렉션을 통해 한 클래스의 필드에서 다른 클래스로 모든 값 복사 (0) | 2020.10.29 |
pylab으로 원격으로 Figure를 저장하는 방법은 무엇입니까? (0) | 2020.10.29 |
Xcode4에서 * goto line * 명령은 어디에 있습니까? (0) | 2020.10.29 |
Node.js에서 CTRL + C 감지 (0) | 2020.10.29 |