2016-07-25 2 views
1

저는 HTML로 파싱하는 것이 매우 새로운데, 이전에 JShp를 사용하여 동적으로 변경하지 않고 간단한 html을 구문 분석했습니다. 그러나 동적 요소가있는 웹 페이지를 구문 분석해야합니다. 이것은 이전에 웹 페이지를 구문 분석하려고 시도한 코드이지만 페이지가로드 된 이후에 추가 된 요소가 있기 때문에 요소를 찾을 수 없었습니다. 상황은 문제가 마커가있는 Google지도를 사용하는 페이지입니다. 나는이 마커의 이미지를 긁어 내려고 시도하고 있습니다.JS에 의해 생성 된 자바 파싱 html 요소

public static void main(String[] args) { 
try { 
    doc = Jsoup.connect("https://pokevision.com") 
      .userAgent(
        "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36") 
      .get(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]"); 

for (Element image : images) { 
    System.out.println("src : " + image.attr("src")); 
} 

} 

이 작업은 JSoup에서 불가능하므로 분명히 다른 라이브러리를 사용하여 이미지 소스를 찾을 수 있습니다. Example of an element I am attempting to select

+1

[당신은 정규식 HTML을 구문 분석 할 수 없습니다]를 참조하십시오 (/ 질문/1732348/정규식 일치 오픈 - 태그 - 제외 - XHTML - 자기 - 포함 - 태그) 그 @Tibrogargan – Tibrogargan

+0

인 CSS 선택기입니다 Jsoup에서 지원 : https://jsoup.org/cookbook/extracting-data/selector-syntax –

답변

0

직면 한 문제는 Jsoup은 브라우저에 전달되는 정적 소스 코드를 검색합니다. 자바 스크립트가 호출 된 후 원하는 것은 DOM이다. 이를 위해 HTML Unit을 사용하여 렌더링 된 페이지를 가져온 다음 구문 분석을 위해 해당 콘텐츠를 Jsoup으로 전달할 수 있습니다.

// capture rendered page 
WebClient webClient = new WebClient(); 
HtmlPage myPage = webClient.getPage("https://pokevision.com"); 

// convert to jsoup dom 
Document doc = Jsoup.parse(myPage.asXml()); 

// extract data using jsoup selectors 
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]"); 
for (Element image : images) { 
    System.out.println("src : " + image.attr("src")); 
} 

// clean up resources 
webClient.close();