簡體   English   中英

使用Nokogiri解析JavaScript隱藏的HTML

[英]Using Nokogiri to parse JavaScript hidden HTML

我正在嘗試使用Nokogiri解析此ASCAP網站以檢索一些歌曲/藝術​​家信息。 這是我要查詢的示例

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

我似乎無法正確訪問DOM,因為源似乎隱藏在某種JavaScript后面。 我對網頁抓取還很陌生,因此嘗試找到一種方法很難。 我嘗試使用Charles來查看數據是否是從另一個站點提取的,並且一直在使用XHelper生成准確的XPath查詢。

這將返回nil,它應該返回“ 1、2 YA'LL”

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

抓取/抓取時的步驟1是關閉瀏覽器中的JavaScript, 然后查看頁面。 那時您所看到的就是Nokogiri所看到的。 如果所需的數據可見,那么使用解析器就可以解決問題。

那時,不要依賴於在檢查元素以顯示所需節點的路徑時看到的瀏覽器的XPath或CSS選擇器列表。 瀏覽器在顯示頁面時會做很多修復工作,而源視圖通常會反映出這些問題,包括顯示動態檢索的數據。 換句話說,瀏覽器對您撒謊的是它最初從頁面中檢索到的內容。 要解決此問題, nokogiri http://some_URL在命令行中使用wgetcurlnokogiri http://some_URL檢索原始頁面,然后找到所需的節點。

如果沒有找到所需的節點,則將需要使用其他工具,例如Watir套件中的某些工具,該工具可以驅動能夠理解JavaScript的瀏覽器。 瀏覽器可以檢索頁面,解釋JavaScript並檢索任何動態頁面內容。 然后,您應該能夠獲得標記並將其傳遞給Nokogiri。

使用google inspector工具來記錄XMLHTTPRequests,並且能夠輕松找出實際從何處加載數據。 感謝@NickVeys!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM