Ruby 通过nokogiri或hpricot刮网
我试图得到给定xpath的实际值。我在sample.rb文件中有以下代码Ruby 通过nokogiri或hpricot刮网,ruby,xpath,screen-scraping,nokogiri,hpricot,Ruby,Xpath,Screen Scraping,Nokogiri,Hpricot,我试图得到给定xpath的实际值。我在sample.rb文件中有以下代码 require 'rubygems' require 'nokogiri' require 'open-uri' doc = Nokogiri::HTML(open('http://www.changebadtogood.com/')) desc "Trying to get the value of given xapth" task :sample do begin doc.xpath('//*[@id="
require 'rubygems'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.changebadtogood.com/'))
desc "Trying to get the value of given xapth"
task :sample do
begin
doc.xpath('//*[@id="view_more"]').each do |link|
puts link.content
end
rescue Exception => e
puts "error"
end
end
输出为:
查看更多问题
当我尝试获取其他XPath的值时,请使用不同的XPath,例如:
/html/body/div[4]/div[3]/h1/span
然后我得到了错误信息
我在Nokogiri试过这个。我不知道为什么这只是给出了一些XPath的结果
我在Hpricot也试过。
我粘贴了我的url和XPath,我看到了
//*[@id=view\u more]
像
查看更多问题。。
[此文本位于最近发行的标题底部]
但它没有显示以下方面的结果:
/html/body/div[4]/div[3]/h1/span
对于这个XPath,我希望结果很糟糕。
[这件事发生在
作为class=hero unit div.]的第一个标题,您的问题与XPath选择器不好有关,与Nokogiri或Hpricot无关。让我们调查一下: irb:01:0>要求“nokogiri”;需要“打开uri” =>正确 irb:02:0>doc=Nokogiri::HTMLopen'http://www.changebadtogood.com/'; 无 =>零 irb:03:0>doc.xpath'/*[@id=view_more]'。每个{链接|放置link.content} 查看更多问题。。 => 0 irb:04:0>doc.at'view_more'。上面的文本更简单。 =>查看更多问题。。 irb:05:0>doc.xpath'/html/body/div[4]/div[3]/h1/span' => [] irb:06:0>doc.xpath'/html/body/div[4]' => [] irb:07:0>doc.xpath'/html/body/div'.length => 2 由此我们可以看到,只有两个div是元素的子元素,因此div[4]无法选择一个 似乎您正试图在此处选择跨度: 变坏为好 不要依赖脆弱的标记来建立元素的匿名层次结构索引,而是利用文档的语义结构来创建一个更简单、更健壮的选择器。使用CSS或XPath语法: irb:08:0>文件位于“h1.landing\u page\u title>span”。文本 =>坏 irb:09:0>doc.at_xpath'/h1[@class=landing_page_title]/span'.text =>坏
这里有很多问题。您没有包含引发错误的代码。捕捉错误并打印“错误”有什么好处?让错误被引发,以便您可以调试它。在发布问题之前,你应该修正你的缩进。而且,你已经问了14个问题,还没有接受一个答案。我已经回答了您下面的问题,但我敦促您重新访问,并为每个问题找到一个最能回答您问题的答案(如果有),然后单击复选标记接受。