読者です 読者をやめる 読者になる 読者になる

代々木で働く超新米エンジニアの足跡

代々木で働くエンジニアです。超新米です。

スクレイピングエラー EUC EUC-JP NilClass src

スクレイピング】 :Nokogiriでエラー「undefined method `’ for nil:NilClass」にハマる - 東京伊勢海老通信

 

・文字の変換

  HTMLの中にはEUC-JPと指定されていてもEUCとして理解できない文字コードが含

  まれている事があるらしい。

  → UTF-8に変換する

    require 'kconv'

              html = open("URL").read

              htm_utf8 = html.kconv(Kconv::UTF-8,Kconv::EUC)

              doc = Nokogiri(html_utf8,'nil','UTF-8')

・エラー

   ◆ undefined method `attribute' for nil:NilClass (NoMethodError)

   スクレイピングでsrcを拾っていこうと思ったら起こった。

   eachで指定された場所を、順々に探していくがsrcが無いとattributeが呼び出せくてエラーがでる。

今回だと、thumbが含まれるpタグの下のimgタグ全てを順番にまわってsrcを探していく。

どこかで、srcがないとattributeが呼び出せなくてエラー。

下がエラー時の一部抜粋。

 

9    doc.css("div.type-post").each do |node|

10   row =

11  row.push(node.css("p.thumb img").attribute("src").value)  

12  end

 

エラー回避のためにsrcがなかったらスルーすると命令しておく。

具体的には、11行目の前に

 if node.css("p.thumb img").length == 0

     next

  end

をいれればOK。

ちなみに、Rubyインタプリタ言語なので1行ずつ実行されていく。

12行目エラーの前に、putsでrowの中身を出力していくのでどこでエラーがでたがわかる。

 

 

 

【vi】  :viエディタ上に行番号表示 - PukiWiki

       ◆ 行数を表示

    :set nu

<practice5.rb~>