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



我想从 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

机械化是您应该用来自动化 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

相关内容

  • 没有找到相关文章

最新更新