2013-02-13 1 views
0

이 스크린 스크래핑에서 정보를 가져와 CVS 나 데이터베이스 파일에 넣을 수 있도록 노력하고 있습니다. 이것은 단지 예제 일 뿐이며 테스트를 위해 선택한 사이트의 실제 데이터입니다. 나는 그것이 유효한지 확인하기 위해 CSS 호출을 테스트했다. 협조 해 주셔서 미리 감사드립니다.Nokogiri HTML 스크랩에서이 요소들을 어떻게 합치 는가?

코드는 다음과 같습니다

require 'rubygems' 
require 'nokogiri' 
require 'open-uri' 

url = "http://neighbors.whitepages.com/search/neighbor_search/7707-Gralnick-Pl/Springfield,-VA" 
doc = Nokogiri::HTML(open(url)) 
puts doc.at_css("title").text 
doc.css(".header").each do |header| 
    address = header.css(".address").text 
    puts "#{address}" 
end 
doc.css(".household_members").each do |household_members| 
    names = household_members.css(".basic_info").text 
    puts "#{names}" 
end 
+1

어떻게 가입하나요? 데이터의 형식을 어떻게 지정 하시겠습니까? –

+0

데이터가 이미 div로 그룹화되었으므로 각 div를 반복해야합니다. – pguardiario

+0

처음에는 주소를 하나의 열에 입력하고 이름을 이름 열에 일치시키는 이름을 지정하려고했습니다. 궁극적으로 주소가 4 인 개별 열의 모든 이름을 cvs 파일이나 테이블에 행 단위로 계속 처리합니다. –

답변

0

이렇게하면 더 유용한 형식으로 데이터를 가져올 수 있습니다. 데이터베이스 스키마는 불가능 당신에게 어떤 도움을 줄 수있는 글을 쓰고있는 힌트없이

[ 
    ["7705 Gralnick Pl", ["Debra A Mussmon"]], 
    ["7709 Gralnick Pl", ["Mary D Apker", "John E Apker"]], 
    ["7202 Caulking Pl", ["Vivianjune S Furber"]], 
    ["9246 Northedge Dr", ["Bridget Cox (703) 455-6057", "Joseph R Furber (703) 455-2442", "Vivian J Furber (703) 455-2442"]], 
    ["9244 Northedge Dr", ["David B Burlingame (703) 455-5708", "Linda J Burlingame (703) 455-5708", "Colby Burlingame (703) 455-5708"]] 
] 

:

require 'nokogiri' 
require 'open-uri' 

url = "http://neighbors.whitepages.com/search/neighbor_search/7707-Gralnick-Pl/Springfield,-VA" 
doc = Nokogiri::HTML(open(url)) 
data = doc.search('div.single').map{ |div| 
    [ 
    div.at('.address').text, 
    div.search('.household_members > .basic_info').map{ |n| n.text.strip } 
    ] 
} 

data[0, 5]에서 상대 : 그것은 쉽게 주소의 그룹과 사람을 허용, <div class="single">를 포함하는 외부의 주위에 루프 귀하의 DB에,하지만 적어도 이것은 당신에게 출발점을 제공합니다. 배열 배열 data을 반복하고 각 하위 배열에 대해 주소와 연결된 이름을 저장합니다.

전화 번호를 사용하여 무언가를하고 싶다면 정규 표현식을 사용하여 캡처하는 방법을 알아야하지만 이는 별개의 질문입니다.

+0

이것은 매우 유용합니다. 데이터를 배열로 가져 오는 것을 해결했지만 코드가 훨씬 더 웅변합니다. 고맙습니다. 이 시점의 모델은 전체 주소와 각 이름을 별도의 필드로 표시 한 것처럼 배열을 캡처합니다. 이 시점에서 필요하지 않으므로 전화를 "chomp"해야 할 수도 있습니다. 다른 테이블에 대한 링크가있는 테이블입니다. –

0

내가 id = ~ group_ 및/또는 classgroupdiv의 반복 것입니다.

div 주소와 세대 구성원을 추출하십시오.