使用Ruby和Nokogiri抓取HTML表格

3
我正在开发一个项目,从一个包含枪支事故/死亡数据的网站上抓取数据。这是该网站的样子:http://www.gunviolencearchive.org/officer-involved-shootings 我试图获取每个表格行,并使用该行数据创建一个对象(实例?抱歉,我是新手),并将其打印到控制台中。目前,@occurances数组返回26次相同数据的数组。显然,它正在用第一行进行覆盖。您如何建议我存储每个实例?
以下是我的代码,(choice)是网站地址。
 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

这是一个非常重要的主题。你的应用程序对这些数据做了什么?#和平 - max pleaner
欢迎来到SO。请阅读"[mcve]"。重要的是,您的问题必须包含足够的信息,以便其他人可以运行它而无需重写代码或编写包装器。 - the Tin Man
@maxpleaner 现在只是一个项目,所以我可以学习爬虫技术,但是我希望以后能够更多地利用这些数据! - miranda_
1个回答

2
在每行循环中,您调用了doc.css(...)。这会导致每次从文档顶部(即从doc)开始搜索。我认为您想要的是相对于行进行搜索,而这个行信息存储在变量x中。
因此,请将以下内容更改为:
date = doc.css("td")[0].text

转换为:

date = x.css("td")[0].text

同样地,对于statecity等内容也是如此。


谢谢Matt,现在我明白了! - miranda_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接