ruby - 使用 Nokogiri 从 POST 表单中抓取搜索结果

标签 ruby nokogiri

我想从 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 粘贴到浏览器中一样。

有人知道我错过了什么吗?或者,如何用另一个 gem 取回我正在寻找的结果?

有了上面的类(class),我希望能够做到:

s = MaxDeliverySearch.new("ham")
s.search #=> big block of search results objects to traverse

最佳答案

Mechanize 是您应该用来自动化网络搜索表单的工具。这应该会让您开始使用 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

关于ruby - 使用 Nokogiri 从 POST 表单中抓取搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22160310/

相关文章:

ruby-on-rails - 如何在 Rails 中使用 ruby​​cas-server 对用户进行身份验证?

ruby - 使用 Nokogiri 提取文本保留链接

ruby - 如何使用 Nokogiri 从 HTML 代码中获取邮件地址

ruby-on-rails - 修改 ActionMailer 返回的 Mail::Message 的标题

ruby - 无法在带有 RVM : Error running make 的 Mountain Lion 上安装 Ruby 1.9.3

ruby - 给定一个 Ruby DateTime,我如何确定它是否代表当前工作周中的一天?

ruby - 在大列表中查找重复数字的最快方法

ruby-on-rails - 如何像使用 Nokogiri gem 一样使用 Ox gem 打开、解析和处理 XML 文件?

ruby - 在 Nokogiri 元素中编辑文本或使用正则表达式

html - 根据 HTML Comment 查找文本