如何加快Rails中的抓取速度

时间:2017-04-12 13:14:40

标签: ruby-on-rails ruby heroku nokogiri

此代码在本地工作正常,但在Heroku上,由于请求超时,它需要超过30秒:

if @url
  @arr = Array.new
  begin
    doc = Nokogiri::HTML(open(@url))
    doc.css(".new-cars-results-box").each do |item|
      hash = Hash.new

      type = item.at_css(".new-car-name").text
      link = "http://uae.yallamotor.com"+item.at_css(".new-car-name")[:href]
      @arr << [link,type]
    end
  rescue
  end

end

如何加快速度?

1 个答案:

答案 0 :(得分:0)

你可以在任何结果框中查询DOM 2次,只需查询一次所有'.new-car-name',并为每一个无用的哈希创建

试试这个:

if @url
    @arr = Array.new
  begin
    doc = Nokogiri::HTML(open(@url))
    url_prefix = 'http://uae.yallamotor.com'
    doc.css(".new-cars-results-box > .new-car-name").each do |item|
      type = item.text
      link = url_prefix + item[:href]
      @arr << [link,type]
    end
  rescue
  end
end

也尝试替换此行

doc.css(".new-cars-results-box > .new-car-name").each do |item|

用这个:

doc.css(".new-car-name").each do |item|