Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从循环中调用children.text时出现NoMethodError,但它在循环外工作_Ruby On Rails_Ruby_Nokogiri - Fatal编程技术网

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来演示问题本身的问题。