2013-07-11 2 views
1

나는 몇 년 전에 벌금을 부과 한 html 페이지에서 데이터를 가져 오는 데 사용되는 오래된 자바 프로그램을 가지고있다. 이제 실행할 때 데이터가 없다.동적 HTML 페이지에서 값을 가져 오는 방법은 무엇입니까?

http://www.batstrading.com/book/ibm/

나는 여전히 HTML 테이블 내 자바 프로그램에서 가져온 볼 수 있지만 데이터가없는,하지만 당신은 그 페이지로 브라우저를 사용하는 경우, 당신은 데이터를 동적으로 볼 수 있습니다 페이지 링크입니다 변화, 왜?

대신 데이터의
<tbody> 
     <tr> 
     <td class="shares">&nbsp;</td> 
     <td class="price">&nbsp;</td> 
     </tr> 

, 그것은이 표시되어 &nbsp;

:

페이지가 브라우저의 소스보기에서 볼 수있는 텍스트처럼에서 지금 내 자바 프로그램을 얻을 HTML 텍스트는 다음과 같습니다

내 코드를 수정하여 데이터를 가져 오는 방법은 무엇입니까? 내 말은 : Java 프로그램에 아무런 문제가 없다는 것입니다. 브라우저의 뷰 소스와 같은 텍스트를 얻었습니다. 페이지가 동적이기 때문에 데이터가 표시되지 않습니다. Java를 사용하여 동적 페이지가 문제입니다.

+0

가능한 복제본 [Apache HttpClient 4 And JavaScript] (http://stackoverflow.com/questions/7260282/apache-httpclient-4-and-javascript) –

+0

페이지가 자바 스크립트를 실행 중입니다. 방화 광과 같은 도구를 사용하여 보내는 요청을 분석하고 Java 응용 프로그램에서 시뮬레이션하십시오. –

+0

가능한 [로컬 HTML 파일 (브라우저없이)에서 자바 스크립트 평가] (http://stackoverflow.com/questions/16375251/evaluate-javascript-on-a-local-html-file-without-browser) 중복 –

답변

2

사이트가 자바 스크립트를 통해 업데이트되므로 현재 방법을 스크랩합니다. HTML을 다운로드하여 작동시킬 수는 없습니다.

http://www.batstrading.com/json/bzx/book/IBM 

그것은 완벽하게 유효한 JSON이다 : 그러나

(셀레늄 또는 JS 엔진을 사용하는 것보다) 훨씬 쉽게 접근 방식은 단순히 자바 스크립트가 페이지를 업데이트하기 위해 사용하는 소스 데이터를 요청하는 것입니다. HTTP 클라이언트와 링크를 요청하고 Jackson을 사용하여 JSON을 구문 분석하십시오. 이렇게하면 매우 신뢰할만한 결과를 얻을 수 있습니다.

면책 조항 당신이하고있는 일은 사용중인 웹 사이트의 서비스 약관을 준수하는지 확인해야합니다. 그렇지 않으면 법적 문제가 발생할 수 있습니다.

+0

개인적으로 나는 모든 상황에서 작동 할 강력한 도구를 사용하는 것을 배우는 것이 다른 사이트가 이것과 같이 좋을 것이라고 가정하는 것보다 나은 해결책이지만, 이것이 실제로 한계라면 단순함을 위해 아마도 더 나은 접근 방법이라고 생각합니다. –

+0

@ SlaterTyranus 나는 직업에 적합한 도구를 사용하는 것을 믿습니다.이 특별한 직업에서 셀레늄은 잔인합니다. 하지만 그렇습니다. 다른 경우 (예 : QA 테스트 또는 친숙한 JSON이없는 화면 스크래핑 사이트)의 놀라운 도구입니다. –

0

페이지를 직접 다운로드하면이 작업을 수행 할 수 없으며 여기에는 두 가지 옵션이 있습니다. 개인적으로 나는 Casperjs 또는 Selenium을 사용하여 페이지의 자바 스크립트와 상호 작용할 것입니다. 그렇지 않으면 자바 스크립트가 수행하는 작업을 수동으로 시뮬레이션해야합니다. 일반적으로 그리 오래 지속되지 않거나 확장 가능하지는 않습니다 (읽기 : 사이트에 대해 변경된 사항은 깨질 것입니다).

이러한 도구는 브라우저를 에뮬레이션하고 특정 요소가로드 될 때까지 기다릴 수있게합니다.

다른 종류의 웹 브라우저가 많이 있지만 캐스퍼는 Java 스크립트이므로 Java 스크립트 내에서 빠르고 쉽게 사용할 수 있기 때문에 캐스퍼를 적극 권장합니다. java에서 javascript를 호출하는 방법은 this을 참조하십시오.