0

私は、この画面スクレイピングから情報を取得して結合し、最終的にRailsのcvsまたはデータベースファイルに配置できるようにする方法を模索しています。これは単なる例ですが、私がテストすることを選択したサイトからの実際のデータです。css呼び出しをテストして、それらが有効であることを確認しました。よろしくお願いします。

コードは次のとおりです。

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
4

2 に答える 2

0

=〜および/または。を使用してdivsを繰り返し処理します。idgroup_class group

次に、それぞれの中divで住所と世帯員を抽出します。

于 2013-02-13T06:20:53.527 に答える
0

これにより、より使いやすい形式でデータを取得できます。を含む外側をループし<div class="single">、アドレスと人のグループ化を容易にします。

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]

[
  ["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"]]
]

データベーススキーマに関するヒントがなければ、DBへの書き込みを支援することは不可能ですが、少なくともこれは出発点になります。配列の配列を反復処理し、dataサブ配列ごとにアドレスを格納してから、関連付けられた名前を格納します。

電話番号を使って何かをしたい場合は、正規表現を使用してそれらをキャプチャする方法を理解する必要がありますが、それは別の質問です。

于 2013-02-15T12:11:49.080 に答える