用Ruby和Nokogiri刮HTML表

时间:2016-03-17 02:49:24

标签: html ruby web-scraping nokogiri

因此,我正在开展一个项目,该项目从具有枪支事故/死亡数据的网站上删除数据。以下是网站的外观:http://www.gunviolencearchive.org/officer-involved-shootings

我正在尝试抓取每个表行并使用该行中的数据创建一个对象(实例?,抱歉我是ruby的新手)并将其打印到控制台中。现在,@ occurances数组返回相同数据的数组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

1 个答案:

答案 0 :(得分:1)

在您调用doc.css(...)的每一行的循环中。这导致每次从文档顶部进行搜索(即从doc)。我认为你想要的是相对于x变量中的行进行搜索。

所以改变这个:

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

到这个

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

,类似于statecity等。