我想从使用nokogiri的亚马逊html页面获取ASIN号码,但我没有使用xpath的运气。我已经尝试过与firepath,我仍然没有得到任何东西。只需获取URL然后运行ruby REGEX来获取ASIN会更好吗?如果是这样的正则表达式是什么样子?如何使用nokogiri从列表中获取'asin'标签?
#!/usr/bin/env ruby -w
require 'nokogiri'
require 'open-uri'
url = "http://www.amazon.com/gp/new-releases/books/3839/ref=zg_bsnr_nav"
doc = Nokogiri::HTML(open(url))
puts doc.xpath('//zg_list').each do | node|
p node['asin']
end
这就是我打印出url时的情况。
#!/usr/bin/env ruby -w
require 'nokogiri'
require 'open-uri'
url = "http://www.amazon.com/gp/new-releases/books/3839/ref=zg_bsnr_nav"
doc = Nokogiri::HTML(open(url))
l = doc.css('div.zg_image a').map { |link|
link['href']
}
puts l # => /Introducing-ZBrush-4-Eric-Keller/dp/0470527641/ref=zg_bsnr_3839_20/183-0702383-0095048
感谢您的xpath版本,我仍然试图在搜索过程中使用xpath。 – Kevin 2011-04-08 15:21:10
XPath功能强大,但有时CSS访问器是更直接的路径。最好的办法是看看哪一条路径对特定搜索的阻力最小,然后跟随它,因为从长远来看,随着代码转移到维护模式,能够快速掌握正在搜索的节点变得比这是更酷/更男子气概的东西写入。 – 2011-04-08 16:13:20
请注意,您可以通过使用XPath来直接选择所有'asin'属性值:'puts doc.xpath('// div [@asin]/@asin')' – Phrogz 2011-04-08 17:10:12