我试图使用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
答案 0 :(得分:0)
当抓取/抓取时,步骤#1是关闭浏览器中的JavaScript,然后查看页面。你在那一点看到的是Nokogiri所看到的。如果你想要的数据是可见的,那么你可以通过解析器得到几率非常好。
此时,不要依赖浏览器的XPath或CSS选择器列表,当您检查元素时,会看到所需节点的路径。浏览器在显示页面时会进行大量修复,源视图通常会反映这些内容,包括显示动态检索的数据。换句话说,浏览器会向您说谎它最初从页面中检索到的内容。要解决此问题,请在命令行中使用wget
,curl
或nokogiri http://some_URL
来检索原始页面,然后找到所需的节点。
如果您没有看到所需的节点,那么您将需要使用其他工具,例如Watir套件中的某些工具,它可以让您驾驶一台能够理解JavaScript的浏览器。浏览器可以检索页面,解释JavaScript并检索任何动态页面内容。然后你应该能够获得标记并将其传递给Nokogiri。
答案 1 :(得分:0)
使用Google检查器工具记录XMLHTTPRequests,并且可以轻松找出实际加载数据的位置。感谢@NickVeys!