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
错误。
答案 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
时,您不需要nokogiri
和open-uri
。 Nokogiri是机械化的运行时依赖,因此机械化将需要它,而open-uri则不是必需的。