使用Nokogiri解析JavaScript隐藏的HTML
我试图用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
使用谷歌督察工具记录XMLHTTPRequests,并很容易找出数据实际加载的位置。感谢@NickVeys!
第1步蜘蛛/拼抢的时候,是要关闭浏览器的JavaScript,然后看在页面。你看到的那个点是Nokogiri看到的。如果你想要的数据是可见的,那么你可以通过解析器获得数据。
此时,不要依赖浏览器的XPath或CSS选择器列表,当您检查元素以向您显示所需节点的路径时。浏览器在显示页面时会进行大量修复,而源视图通常会反映这些内容,包括显示动态检索的数据。换句话说,浏览器正在向你介绍它最初从页面中检索的内容。要解决该问题,请在命令行上使用wget
,curl
或nokogiri http://some_URL
来检索原始页面,然后找到所需的节点。
如果你没有看到你想要的节点,那么你将需要使用其他工具,如Watir套件中的某些东西,它可以让你驱动一个理解JavaScript的浏览器。浏览器可以检索页面,解释JavaScript并检索任何动态页面内容。那么你应该能够得到这个标记并将它传递给Nokogiri。
该网站看起来像Javascript饲料。您需要使用可以使用JS处理页面的东西,然后读取生成的DOM。 [本教程关于Capybara + PhantomJS](http://www.chrisle.me/2012/12/scraping-html5-sites-using-capybara-phantomjs/)可能对您有用。 – 2014-12-04 02:23:27
不要将我们指向一个链接作为数据的一个例子。链接腐烂和中断。相反,请在问题中提供一个最简单的HTML示例。还有什么可以阻止答案。 – 2014-12-04 03:16:17
对不起@thetinman,我无法展示一个例子,像我描述的描述那样的b/c,当您查看源代码时,HTML实际上并没有显示出来。 – 2014-12-12 19:28:47