【问题标题】:Scraping HTML table with Ruby and Nokogiri使用 Ruby 和 Nokogiri 抓取 HTML 表格
【发布时间】:2016-07-03 05:23:57
【问题描述】:

因此,我正在开展一个项目,该项目从具有枪支事故/死亡数据的网站上抓取数据。这是网站的样子: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

【问题讨论】:

  • 这是一个非常重要的主题。您的应用程序如何处理这些数据? #和平
  • 欢迎来到 SO。请阅读“minimal reproducible example”。重要的是您的问题包含足够的内容,以便人们可以运行它而无需重写您的代码或为其编写包装器。
  • @maxpleaner 现在只是一个项目,所以我可以很好地学习抓取,但我想稍后再用数据做更多事情!

标签: html ruby web-scraping nokogiri


【解决方案1】:

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

所以改变这个:

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

到这里

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

statecity 等也是如此。

【讨论】:

  • 谢谢马特,现在说得通了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2014-06-21
相关资源
最近更新 更多