使用Nokogiri解析JavaScript隐藏的HTML

时间:2014-12-04 02:15:10

标签: javascript html ruby nokogiri

我试图使用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

2 个答案:

答案 0 :(得分:0)

当抓取/抓取时,步骤#1是关闭浏览器中的JavaScript,然后查看页面。你在那一点看到的是Nokogiri所看到的。如果你想要的数据是可见的,那么你可以通过解析器得到几率非常好。

此时,不要依赖浏览器的XPath或CSS选择器列表,当您检查元素时,会看到所需节点的路径。浏览器在显示页面时会进行大量修复,源视图通常会反映这些内容,包括显示动态检索的数据。换句话说,浏览器会向您说谎它最初从页面中检索到的内容。要解决此问题,请在命令行中使用wgetcurlnokogiri http://some_URL来检索原始页面,然后找到所需的节点。

如果您没有看到所需的节点,那么您将需要使用其他工具,例如Watir套件中的某些工具,它可以让您驾驶一台能够理解JavaScript的浏览器。浏览器可以检索页面,解释JavaScript并检索任何动态页面内容。然后你应该能够获得标记并将其传递给Nokogiri。

答案 1 :(得分:0)

使用Google检查器工具记录XMLHTTPRequests,并且可以轻松找出实际加载数据的位置。感谢@NickVeys!