我在尝试使用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”。知道这里发生了什么吗?
答案 0 :(得分:1)
Google不会在回复中返回您要查找的数据。当浏览器加载页面时,使用JavaScript获取此元素。 Nokogiri不会在页面上运行任何JavaScript。