1

次のコードは、サイトのさまざまなセクションを破棄します。基本的に、各セクションにいくつかのメソッドがあり、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方法で部品を使用する必要があるかどうかなど、部品をどうするかわかりませんか? htmlandfile引数をどうするかについても混乱しています。新しいparse方法を使用した後、それらをそのままにしておくか、削除する必要がありますか?

私が望むものを達成する方法について何か提案はありますか?

4

1 に答える 1