如何在Nokogiri HTML scrape中加入这些元素?

时间:2013-02-13 04:15:43

标签: ruby-on-rails ruby nokogiri

我试图看看如何从此屏幕获取信息以便加入,以便最终可以将其放入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

2 个答案:

答案 0 :(得分:0)

我会使用div =〜id和/或group_ class来迭代group

然后在每个div内提取地址和家庭成员。

答案 1 :(得分: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数组数组,并为每个子数组存储地址,然后存储相关名称。

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