未定义的方法错误单击简单的webscraper

时间:2015-01-12 21:20:32

标签: ruby-on-rails ruby-on-rails-3 nokogiri mechanize mechanize-ruby

task :fetch_front => :environment do 
require 'rubygems'  
require 'nokogiri'
require 'open-uri'
require 'mechanize'
  agent = Mechanize.new

  agent.get("http://www.reddit.com/")

  agent.page.search("a.title").each do |thread|
   thread.click

  end
end

我正在使用mechanize进入第一页上的每个reddit线程并返回每个线程的顶部注释。每个方法中的'thread'块返回每个reddit线程的链接。问题是我不确定如何点击该主题并返回每个帖子的最高评论

使用我当前的代码,当我尝试单击每个线程以显示注释时,它返回undefined method click错误。

2 个答案:

答案 0 :(得分:0)

在代理上调用click并将要单击的内容作为参数传递:

agent.click(thread)

答案 1 :(得分:0)

点击主题标题并不会带您进入主题评论页面。当然,您必须单击具有线程注释计数的链接。我编写(并经过测试),这段代码将带您进入每个线程评论页面。

require 'mechanize'
robot = Mechanize.new
response = robot.get('http://www.reddit.com/').parser

# Get the comments page link for every thread on the first page
response.css('#siteTable .thing a.comments').each do |thread_comments_link|
  comments_page = robot.get(thread_comments_link[:href]).parser
  # scrap comments page here
end

注意:当您使用mechanize时,您不需要nokogiriopen-uri。 Nokogiri是机械化的运行时依赖,因此机械化将需要它,而open-uri则不是必需的。