2014-12-04 81 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。