我正试图从表中删除数据,但我无法弄清楚为什么我无法迭代收集的数据。
我想迭代遍历表中的每个节点,获取文本但该语句只有在我的循环外写入才有效。
Take a look at the terminal I'm getting
很明显,循环外的puts
工作正常,但同一行在循环中失败。如果我使用
puts entry.children[1]
我在循环中得到了正确的响应,但添加children.text
是导致失败的原因:
require 'HTTParty'
require 'Nokogiri'
require 'JSON'
require 'Pry'
require 'CSV'
module Guns
class Scraper
page = HTTParty.get('http://www.gunviolencearchive.org/last-72-hours')
parse_page = Nokogiri::HTML(page)
incidents = Array.new
raw_table = parse_page.css('#block-system-main').css('.sticky-enabled')
table_entries = raw_table.xpath('//tbody')[0].children
state = table_entries.children[1].children.text
puts table_entries.children[1].children.text
table_entries.each do |entry|
puts entry.children[1].children.text
end
Pry.start(binding)
end
end
如果我无法解决这个问题,我或许可以在最终程序的客户端进行字符串切片,但我宁愿不必这样做。
答案 0 :(得分:0)
table_entries
对象等于nil,或table_entries.children[1]
等于nil。因此,您在nil
上调用了子方法,该方法未定义children
方法。您可能想要使用try
方法,如下所示:
table_entries.children[1].try(:children).try(:text)
但除非您知道为什么这些值为nil
并且可以确认它们对应用程序的设计没有损害,否则您只是允许您的代码无声地失败。