我想从http://maxdelivery.com中搜索搜索结果,但不幸的是,他们使用POST代替GET作为搜索表单。我找到了如何使用Nokogiri和RestClient伪造帖子表单提交的描述,但它没有为我返回任何结果:http://ruby.bastardsbook.com/chapters/web-crawling/
之前我和Nokogiri合作过,但不是POST表单提交的结果。
这是我现在的代码,只是稍微修改了上面链接中的示例:
class MaxDeliverySearch
REQUEST_URL = "http://www.maxdelivery.com/nkz/exec/Search/Display"
def initialize(search_term)
@term = search_term
end
def search
if page = RestClient.post(REQUEST_URL, {
'searchCategory'=>'*',
'searchString'=>@term,
'x'=>'0',
'y'=>'0'
})
puts "Success finding search term: #{@term}"
File.open("temp/Display-#{@term}.html", 'w'){|f| f.write page.body}
npage = Nokogiri::HTML(page)
rows = npage.css('table tr')
puts "#{rows.length} rows"
rows.each do |row|
puts row.css('td').map{|td| td.text}.join(', ')
end
end
end
end
现在(忽略格式化的东西),我希望if page = RestClient.post(REQUEST_URL, {...}
如果传递了一个“好”的搜索词会返回一些搜索结果,但每次我只是回到搜索结果页面而没有实际结果,如果我将URL粘贴到浏览器中。
任何人都知道我缺少什么?或者,如何找回我正在寻找另一个宝石的结果?
通过上面的课程,我希望能够做到:
s = MaxDeliverySearch.new("ham")
s.search #=> big block of search results objects to traverse
答案 0 :(得分:4)
您应该使用Mechanize来自动化Web搜索表单。这应该可以让您开始使用Mechanize。
require 'mechanize'
agent = Mechanize.new
page = agent.get('http://maxdelivery.com')
form = page.form('SearchForm')
form.searchString = "ham"
page = agent.submit(form)
page.search("div.searchResultItem").each do |item|
puts item.search(".searchName i").text.strip
end