2014-12-04 88 views
0

我試圖用Nokogiri來解析這個ASCAP網站來檢索一些歌曲/藝術​​家信息。下面是什麼我想查詢使用Nokogiri解析JavaScript隱藏的HTML

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

我似乎無法正常訪問DOM因爲源似乎背後某種JavaScript來隱藏一個例子。我對網絡抓取很陌生,所以想要找到一種方法來解決這個問題一直很困難。我嘗試使用Charles來查看是否從另一個站點獲取數據,並使用XHelper生成準確的XPath查詢。

這將返回零,它應該返回「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/)可能對您有用。 – 2014-12-04 02:23:27

+0

不要將我們指向一個鏈接作爲數據的一個例子。鏈接腐爛和中斷。相反,請在問題中提供一個最簡單的HTML示例。還有什麼可以阻止答案。 – 2014-12-04 03:16:17

+0

對不起@thetinman,我無法展示一個例子,像我描述的描述那樣的b/c,當您查看源代碼時,HTML實際上並沒有顯示出來。 – 2014-12-12 19:28:47

回答

0

使用谷歌督察工具記錄XMLHTTPRequests,並很容易找出數據實際加載的位置。感謝@NickVeys!

0

第1步蜘蛛/拼搶的時候,是要關閉瀏覽器的JavaScript,然後在頁面。你看到的那個點是Nokogiri看到的。如果你想要的數據是可見的,那麼你可以通過解析器獲得數據。

此時,不要依賴瀏覽器的XPath或CSS選擇器列表,當您檢查元素以向您顯示所需節點的路徑時。瀏覽器在顯示頁面時會進行大量修復,而源視圖通常會反映這些內容,包括顯示動態檢索的數據。換句話說,瀏覽器正在向你介紹它最初從頁面中檢索的內容。要解決該問題,請在命令行上使用wgetcurlnokogiri http://some_URL來檢索原始頁面,然後找到所需的節點。

如果你沒有看到你想要的節點,那麼你將需要使用其他工具,如Watir套件中的某些東西,它可以讓你驅動一個理解JavaScript的瀏覽器。瀏覽器可以檢索頁面,解釋JavaScript並檢索任何動態頁面內容。那麼你應該能夠得到這個標記並將它傳遞給Nokogiri。