2016-10-20 5 views
-1

テーブルからデータを削り取ろうとしているが、収集したデータを反復できない理由を理解できない。ループからchildren.textを呼び出すときにNoMethodErrorが発生するが、ループの外で動作する

私はテーブル内の各ノードを繰り返し処理したいと思っていますが、文章はループ内に書かれている場合にのみ機能します。

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 

私はクライアント側で文字列のスライシングを行うことができるかもしれません私はこの問題を解決できない場合は最終的なプログラムが、私はむしろする必要はありません。

+1

小文字にする宝石の名前を折り畳むのは慣習的です。エラーのイメージを見せる代わりに、エラーの重要な部分をテキストとしてコピーして質問に貼り付け、適切に書式を設定する必要があります。リンクは腐って壊れてしまい、あなたの質問があまり意味をなさないでしょう。 「[mcve]」を参照してください。また、質問自体に問題を示すページから抽出した絶対最小限のHTMLが必要です。 –

答えて

0

オブジェクトがnilに等しいか、table_entries.children[1]がnilに等しい。結果としてnilの子メソッドを呼び出すと、childrenメソッドが定義されていません。

table_entries.children[1].try(:children).try(:text) 

しかし、これらの値は nilであり、彼らはあなたがちょうどあなたのコードが失敗することができますされているアプリのデザインを損なわないことを確認することができますなぜあなたは知っている限り:あなたはこのよう tryメソッドを使用するように誘惑されるかもしれません黙って

+0

それでも私は混乱します。私はそれがターミナルが言っていることを知っています。何かがそれを引き起こす原因であることは間違いありませんが、なぜ同じリファレンスを使っている同じステートメントがループ外で動作するのでしょうか? ruby​​ループが宣言される方法や、table_entries変数の実際の値は何か分からないと思われます。 私が欲しいレコードは、このページのテーブルをリッピングすることです。http://www.gunviolencearchive.org/last-72-hoursこれをcsvに書き込みます。 – McBrideMusings

+0

スタックトレースを転記できますか? –

関連する問題