私がやろうとしているのは、Nokogiri を使用して複数のベンダーからアイテムの名前と価格をこすり落とすことです。メソッド引数を使用して、CSS セレクター (検索名と価格) を Nokogiri に渡します。
複数の URL を「スクレイプ」メソッドに渡し、他の引数 (例: vendor、item_path) も渡す方法に関するガイダンスはありますか? それとも、私はこれを完全に間違った方法で行っていますか?
コードは次のとおりです。
require 'rubygems' # Load Ruby Gems
require 'nokogiri' # Load Nokogiri
require 'open-uri' # Load Open-URI
@@collection = Array.new # Array to hold meta hash
def scrape(url, vendor, item_path, name_path, price_path)
doc = Nokogiri::HTML(open(url)) # Opens URL
items = doc.css(item_path) # Sets items
items.each do |item| # Iterates through each item on grid
@@collection << meta = Hash.new # Creates a new hash then add to global array
meta[:vendor] = vendor
meta[:name] = item.css(name_path).text.strip
meta[:price] = item.css(price_path).to_s.scan(/\d+[.]\d+/).join
end
end
scrape( "page_a.html", "Sample Vendor A", "#products", ".title", ".prices")
scrape( ["page_a.html", "page_b.html"], "Sample Vendor B", "#items", ".productname", ".price")