我正在尝试如何从这个屏幕抓取中获取信息以进行连接,以便最终将其放入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
这将以更可用的格式获得数据。它围绕包含<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
数组上迭代,并为每个子数组存储地址,然后存储关联的名称。
如果你想对电话号码做点什么,你必须想办法用正则表达式来捕捉它们,但这是一个单独的问题。
我会用id
=~group_
和/或class
group
迭代div
s。
然后在每个div
中提取地址和家庭成员。