使用Nokogiri和XPATH解决谷歌的问题

时间:2014-02-25 20:49:07

标签: ruby xpath nokogiri

我在尝试使用Nokogiri和XPATH从Google搜索搜索结果时遇到问题。我只是谷歌问题,其他网站似乎工作正常。

我正在使用Chrome的元素检查器获取元素XPATH字符串。

这是一个有效的Stack Overflow示例:

# Testing element on StackOverflow - returns the questions text
doc = Nokogiri::HTML(open('http://stackoverflow.com/questions/17763549/how-do-i-scrape-data-through-mechanize-and-nokogiri'))

p doc.at_xpath("//*[@id='question-header']/h1/a").text
=> "How do I scrape data through Mechanize and Nokogiri?" 

尝试使用Google的结果:

# Testing element on Google, should return the first result title
doc = Nokogiri::HTML(open('https://www.google.com/#q=stack+overflow+error'))

p doc.at_xpath("//*[@id='rso']/li[1]/div/h3/a").text
NoMethodError: undefined method `text' for nil:NilClass
  from (irb):81
  from /home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
  from /home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
  from /home/kyle/.rvm/gems/ruby-2.1.0/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'

我在所有Google网页上收到“NoMethodError”。知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

Google不会在回复中返回您要查找的数据。当浏览器加载页面时,使用JavaScript获取此元素。 Nokogiri不会在页面上运行任何JavaScript。