スクレイピングエラー 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~>