次のコードは、サイトのさまざまなセクションを破棄します。基本的に、各セクションにいくつかのメソッドがあり、parse_details
すべてのハッシュを単一のハッシュにマージするメソッド ( ) があります。
class Parser
def parse_details(html)
merged_hashes = {}
array_of_hashes = [
self.parse_department(html),
self.parse_super_saver(html),
]
array_of_hashes.inject(merged_hashes,:update)
return merged_hashes
end
def parse_department(file)
html = file
data = Nokogiri::HTML(open(html))
department = data.css('#ref_2619534011')
@department_hash = {}
department.css('li').drop(1).each do | department |
department_title = department.css('.refinementLink').text
department_count = department.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
@department_hash[:department] ||= {}
@department_hash[:department]["Pet Supplies"] ||= {}
@department_hash[:department]["Pet Supplies"][department_title] = department_count
end
return @department_hash
end
def parse_super_saver(file)
html = file
data = Nokogiri::HTML(open(html))
super_saver = data.css('#ref_2661623011')
@super_saver_hash = {}
super_saver.css('li').each do | super_saver |
super_saver_title = super_saver.css('.refinementLink').text
super_saver_count = super_saver.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
@super_saver_hash[:super_saver] ||= {}
@super_saver_hash[:super_saver][super_saver_title] = super_saver_count
end
return @super_saver_hash
end
ご覧のとおり、何度も電話をかけNokogiri::HTML(open(html))
ています。
誰かが私に次のようなことを提案しました:
def self.parse(html)
doc = Nokogiri::HTML html
self.parse_details(doc) unless doc.nil?
end
だから電話Nokogiri::HTML
は1回だけ。
しかし、私は立ち往生しています。たとえばdepartment = data.css('#ref_2619534011')
、新しいparse
方法で部品を使用する必要があるかどうかなど、部品をどうするかわかりませんか? html
andfile
引数をどうするかについても混乱しています。新しいparse
方法を使用した後、それらをそのままにしておくか、削除する必要がありますか?
私が望むものを達成する方法について何か提案はありますか?