用 Ruby 和 Nokogiri 抓取 HTML table
Scraping HTML table with Ruby and Nokogiri
所以我正在做一个项目,从一个有枪支 accident/death 数据的网站上抓取数据。网站如下所示:http://www.gunviolencearchive.org/officer-involved-shootings
我正在尝试抓取每个 table 行并使用该行中的数据制作一个对象(实例?抱歉,我是 ruby 的新手)并将其打印到安慰。现在,@occurances 数组 returns 相同数据的数组 26 次。显然它正在覆盖第一行。您建议我如何存储这些实例中的每一个?
这是我的代码,(选择)是网址。
def self.data_from_choice(choice)
doc = Nokogiri::HTML(open(choice))
@occurances = []
doc.xpath("//tr").each do |x|
date = doc.css("td")[0].text
state = doc.css("td")[1].text
city = doc.css("td")[2].text
deaths = doc.css("td")[4].text
injured = doc.css("td")[5].text
source = doc.search(".links li.last a").attr("href").value
@occurances << {:date => date, :state => state, :city => city, :deaths => deaths, :injured => injured, :source => source}
end
puts @occurances
end
在您调用的每一行的循环中 doc.css(...)
。这导致每次都从文档顶部进行搜索(即从 doc
)。我认为您想要的是相对于 x
变量中的行进行搜索。
所以改变这个:
date = doc.css("td")[0].text
至此
date = x.css("td")[0].text
state
、city
等
也类似
所以我正在做一个项目,从一个有枪支 accident/death 数据的网站上抓取数据。网站如下所示:http://www.gunviolencearchive.org/officer-involved-shootings
我正在尝试抓取每个 table 行并使用该行中的数据制作一个对象(实例?抱歉,我是 ruby 的新手)并将其打印到安慰。现在,@occurances 数组 returns 相同数据的数组 26 次。显然它正在覆盖第一行。您建议我如何存储这些实例中的每一个?
这是我的代码,(选择)是网址。
def self.data_from_choice(choice)
doc = Nokogiri::HTML(open(choice))
@occurances = []
doc.xpath("//tr").each do |x|
date = doc.css("td")[0].text
state = doc.css("td")[1].text
city = doc.css("td")[2].text
deaths = doc.css("td")[4].text
injured = doc.css("td")[5].text
source = doc.search(".links li.last a").attr("href").value
@occurances << {:date => date, :state => state, :city => city, :deaths => deaths, :injured => injured, :source => source}
end
puts @occurances
end
在您调用的每一行的循环中 doc.css(...)
。这导致每次都从文档顶部进行搜索(即从 doc
)。我认为您想要的是相对于 x
变量中的行进行搜索。
所以改变这个:
date = doc.css("td")[0].text
至此
date = x.css("td")[0].text
state
、city
等