作为一项学习练习,我构建了一个抓取工具来获取 Reddit 的头条新闻。当前的实时示例可以在 here 中找到它还不包括任何用户定义的功能。我想添加一项功能,允许用户通过表单输入输入他们选择的首选 subreddit。如何将 subreddit 附加到我的 RedditScraper 类中指定的 url?例如,我希望基本 url 为“http:reddit.com/r/”,然后用户可以输入“ruby”或他们喜欢的任何 subreddit。这是我的刮刀类:
require 'nokogiri'
require 'open-uri'
require 'mechanize'
class RedditScraper
def initialize
@headline = []
@agent = Mechanize.new
end
def fetch_reddit_headlines
@url = 'http://www.reddit.com/r/'
mech_page = @agent.get(@url)
num_pages_to_scrape = 2
count = 0
while(num_pages_to_scrape > count)
page = mech_page.parser
page.css('a.title').each do |link|
if link['href'].include?('http')
@headline << { content: link.content, href: link['href'] }
else
@headline << { content: link.content, href: "http://reddit.com" + link['href'] }
end
end
@headline
count += 1
mech_page = @agent.get(page.css('.nextprev').css('a').last.attributes["href"].value)
end
return @headline
end
end
这是我的 Controller 操作:
def index
@fetch_reddit = RedditScraper.new.fetch_reddit_headlines
end
我的表格部分(我按照示例 here ):
<%= form_tag("/search", method: "get") do %>
<%= label_tag(:q, "Enter a Subreddit (example: ruby):") %>
<%= text_field_tag(:q) %>
<p><%= submit_tag("Retrieve") %></p>
<% end %>
更新:尝试了下面的建议,但现在收到错误:
最佳答案
在您的 Controller 中
def index
@fetch_reddit = RedditScraper.new.fetch_reddit_headlines(params[:q])
end
在 RedditScraper 中
def fetch_reddit_headlines(subreddit = 'ruby')
subreddit = 'ruby' if subreddit.nil?
@url = "http://www.reddit.com/r/#{subreddit}"
mech_page = @agent.get(@url)
(...)
在你的表格中
<%= form_tag("/", method: "get") do %>
(...)
如果你想在你的表单中使用“/search”,你必须在 routes.rb 中注册一个路径
get 'search' => 'controller#action'
关于ruby-on-rails - Nokogiri/Mechanize 刮板将表单值传递给刮板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24036500/