Ruby on rails 从循环中调用children.text时出现NoMethodError,但它在循环外工作
我试图从一个表中提取数据,但我不明白为什么我不能遍历收集的数据 我希望遍历表中的每个节点,获取其中的文本,但该语句只有在循环外部编写时才有效 很明显,Ruby on rails 从循环中调用children.text时出现NoMethodError,但它在循环外工作,ruby-on-rails,ruby,nokogiri,Ruby On Rails,Ruby,Nokogiri,我试图从一个表中提取数据,但我不明白为什么我不能遍历收集的数据 我希望遍历表中的每个节点,获取其中的文本,但该语句只有在循环外部编写时才有效 很明显,将放在循环外可以正常工作,但同一行在循环中失败。如果我使用 puts entry.children[1] 我在循环中得到了正确的响应,但是添加了子项。文本是导致它失败的原因: require 'HTTParty' require 'Nokogiri' require 'JSON' require 'Pry' require 'CSV' mod
将
放在循环外可以正常工作,但同一行在循环中失败。如果我使用
puts entry.children[1]
我在循环中得到了正确的响应,但是添加了子项。文本是导致它失败的原因:
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
如果我不能解决这个问题,我可能可以在最终程序的客户端执行字符串切片,但我宁愿不这样做。表项的对象等于nil,或者表项。子项[1]
等于nil。因此,您正在调用nil
上的children方法,该方法未定义children
方法。您可能会尝试这样使用try
方法:
table_entries.children[1].try(:children).try(:text)
但是,除非你知道为什么这些值是nil
,并且可以确认它们对应用程序的设计没有损害,否则你就是在让代码默默地失败。这仍然让我感到困惑。我知道终端是这么说的,我毫不怀疑是什么原因导致了这种情况的发生,但是为什么使用相同引用的相同语句会在循环之外工作呢?我假设我不了解ruby循环的声明方式,或者table_entries变量的实际值是什么。为了记录,我只想把这个页面上的表格撕成一个csv。你能把堆栈跟踪贴出来吗?把你要包含的宝石的名字折成小写是很习惯的做法。不要让我们看到错误的图像,你应该将错误的基本/重要部分复制/粘贴为文本到你的问题中,并适当设置格式。链接会腐烂和断开,当他们这样做时,你的问题就没有多大意义了。见“”。此外,我们还需要从页面中提取的绝对最小的HTML来演示问题本身的问题。