0

我正在尝试查看如何从该屏幕抓取中获取信息以加入,以便最终将其放入 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

我会用=~和/或s遍历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"]]
]

如果您的数据库模式没有任何提示,就不可能给您任何写入数据库的帮助,但至少这为您提供了一个起点。遍历data数组数组,并为每个子数组存储地址,然后存储相关名称。

如果你想对电话号码做一些事情,你必须弄清楚如何使用正则表达式来捕获它们,但这是一个单独的问题。

于 2013-02-15T12:11:49.080 回答