Ruby 通过nokogiri或hpricot刮网

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="

我试图得到给定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="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个问题,还没有接受一个答案。我已经回答了您下面的问题,但我敦促您重新访问,并为每个问题找到一个最能回答您问题的答案(如果有),然后单击复选标记接受。