다음 코드는 사이트의 다른 섹션을 스크랩합니다.Nokogiri :: HTML을 한 번만 호출하도록 다음 메소드를 수정 하시겠습니까?
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))
번 이상 전화 드렸습니다 볼 수 있듯이 : 나는 기본적으로 각 섹션에 대한 몇 가지 방법, 다음 하나 하나에 모든 해시를 병합하는 방법 (parse_details
)가 있습니다.
def self.parse(html)
doc = Nokogiri::HTML html
self.parse_details(doc) unless doc.nil?
end
그래서 내가 한 번만
Nokogiri::HTML
전화 :
사람이 같은 것을 할 날을 제안했다.
하지만 저는 붙어 있습니다. 예를 들어, department = data.css('#ref_2619534011')
과 같은 부품으로 무엇을해야할지 모르겠지만 새로운 parse
방법을 사용할지 여부를 결정해야합니다. 나는 또한 html
과 file
인수로 무엇을해야할지 혼란 스럽다. 새로운 parse
방법을 사용한 후에는 거기에 그대로 두거나 제거해야합니까?
내가 원하는 것을 어떻게 달성 할 수 있을지 제안 해 주시겠습니까?
감사합니다! 'let (: department_hash) {Parser.new.parse html_pet_supplies}'다음과 같은 오류가 발생합니다 :'오류/오류 : let (: department_hash) {Parser.new. 구문 분석 html_pet_supplies} 하면 ArgumentError : 인수 잘못된 번호 (1 0)'초기화 # ./parser.rb:4:in #'./parser_spec.rb:24:in 원인이 될 수 무엇 new'' ? – alexchenco
"인자의 개수가 잘못되었습니다 (0은 1)"는 "인자가 1 개인 메소드를 호출하고, 그것을 0으로 지정하고 있습니다"를 의미합니다. 특히 최상위 코드를 사용하는 경우'Parser.new (url)'을 호출해야하며, 두 번째 코드를 사용하는 경우'Parser.parse_details (url)'을 호출해야합니다. – Phrogz