0

我正在使用以下代码废弃谷歌

def google_search(query)
  page = @agent.get('http://www.google.com')
  google_form = page.form_with(:name => 'f')
  google_form.q = query
  page = @agent.submit(google_form)
  page
end

但有时我得到NoMethodError: undefined methodq=' for nil:NilClass` 错误。可能是什么问题?

4

2 回答 2

5

您正在使用文档中的示例代码,在 google 搜索中没有具有该名称的表单,请尝试“gbqf”,但它可能会因语言环境或各种设置而异。当您使用 mechanize 时,使用“pp”在开发过程中漂亮地打印元素,以查看您正在获取的内容和接下来的内容。

工作 .rb 示例(从http://mechanize.rubyforge.org/EXAMPLES_rdoc.html更新)通过查询获得前 10 个结果。

require 'rubygems'
require 'mechanize'

a = Mechanize.new { |agent|
  agent.user_agent_alias = 'Mac Safari'
}

a.get('http://google.com/') do |page|
  search_result = page.form_with(:name => 'gbqf') do |search|
    search.q = 'ruby mechanize'
  end.submit

  search_result.search(".//a[@class='l']").each_with_index.map do |link, i|
    puts "#{i} #{link.content}"
  end
end
于 2012-04-23T19:43:05.473 回答
0

该错误意味着您正在q调用NilClass. 如果page.form_with(:name => 'f')失败则会发生这种情况,因此google_form最终成为nil.

于 2012-04-22T09:32:07.067 回答