2014-12-04 1 views
0

Nokogiri를 사용하여이 ASCAP 웹 사이트를 구문 분석하여 일부 노래/아티스트 정보를 검색하려고합니다. 여기에 내가Nokogiri를 사용하여 JavaScript 숨겨진 HTML을 구문 분석

https://mobile.ascap.com/aceclient/AceClient/#ace/writer/1628840/JAY%20Z

나는 소스가 자바 스크립트의 어떤 종류의 뒤에 숨겨진 것으로 보인다 때문에 제대로 DOM에 액세스 할 수없는 것 쿼리 할 것입니다 무엇의 예입니다. 나는 웹 스크래핑에 익숙하지 않으므로이를 수행하는 방법을 찾기가 꽤 어려웠습니다. 데이터가 다른 사이트에서 가져온 것인지 확인하기 위해 Charles를 사용하여 시도했으며 정확한 XPath 쿼리를 생성하기 위해 XHelper를 사용해 왔습니다.

이는 "1, 2 가주"

page = Nokogiri::HTML(open('https://mobile.ascap.com/aceclient/AceClient/#ace/writer/1628840/JAY%20Z')) 

puts page.xpath('/html/body/div[@id="desktopSearch"]/div[@id='ace']/div[@id="aceMain"]/div[@id="aceResults"]/ul[@id="ace_list"]/li[@class="nav"][1]/div[@class="workTitle"]').text 
+0

해당 사이트는 Javascript로 보입니다. JS로 페이지를 처리 ​​할 수있는 무언가를 사용해야하고 그 결과 DOM을 읽을 필요가있을 것이다. [Capybara + PhantomJS에 대한이 튜토리얼] (http://www.chrisle.me/2012/12/scraping-html5-sites-using-capybara-phantomjs/)이 유용 할 수 있습니다. –

+0

데이터의 예로서 링크를 가리 키지 마십시오. 링크 썩어과 휴식. 대신, 질문 안에 HTML의 최소한의 예를 제시하십시오. 다른 것은 답을 낙담시킵니다. –

+0

미안 @thetinman, 내가 설명을 b/c 예를 보여줄 수 없다, 설명하는 HTML은 실제로 소스를 볼 때 나타나지 않습니다. –

답변

0

Google 검사기 도구를 사용하여 XMLHTTPRequests를 기록했으며 데이터가 실제로로드 된 위치를 쉽게 파악할 수있었습니다. @NickVeys에 감사드립니다!

0

다음/스크래핑을 스파이더 때 # 1, 브라우저에서 자바 스크립트를 해제하는 것입니다 단계, 모양에 반환해야 전무를 반환 페이지. 그 시점에서 여러분이 보는 것은 Nokogiri가 보는 것입니다. 원하는 데이터가 표시되면 파서로 확율을 얻는 것이 좋습니다.

그 시점에서 원하는 노드에 대한 경로를 보여주기 위해 요소를 검사 할 때 브라우저의 XPath 또는 CSS 선택기 목록에 의존하지 마십시오. 브라우저는 페이지를 표시 할 때 많은 수정 작업을 수행하며 원본보기는 대개 동적으로 검색된 데이터 표시를 포함하여이를 반영합니다. 즉, 브라우저는 원래 페이지에서 검색 한 내용에 대해 거짓말을합니다. 이 문제를 해결하려면 명령 줄에서 wget, curl 또는 nokogiri http://some_URL을 사용하여 원본 페이지를 검색 한 다음 원하는 노드를 찾으십시오.

원하는 노드가 보이지 않으면 Watir 제품군의 것과 같은 다른 도구를 사용해야합니다.이 도구를 사용하면 JavaScript를 이해하는 브라우저를 사용할 수 있습니다. 브라우저는 페이지를 검색하고 JavaScript를 해석하며 모든 동적 페이지 컨텐츠를 검색 할 수 있습니다. 그러면 마크 업에서 Nokogiri로 전달할 수 있습니다.