NokogiriでEUC-JPのサイトをパースするときにエラーになっちゃう対策 with livedoor blogの記事タイトル一覧を取得しよう
やりたいこと
ライヴドアブログの全記事タイトルとURLのリストがほしい。
実現方法
- 最新の記事をURLを持ってくる
- 「前の記事へ」リンクをたどる
- 「前の記事へ」リンクがページになければ終了
つまづいたこと
EUC-JPからUTF-8に変換できない文字「①」などがあると死亡する
xxx.rb:12:in `block (2 levels) in <top (required)>': "\xAD\xA1" from EUC-JP to UTF-8 (Encoding::UndefinedConversionError)
俺様のコード
ほとんどパクりま参考にさせていただきました
require 'open-uri' require 'nokogiri' require 'kconv' url = "http://livedoreのブログの最新記事" result = [] loop do html = open(url, "r:binary").read doc = Nokogiri::HTML.parse(html.toutf8, nil, "UTF-8") result = doc.css('.article-title-alone a').each_with_object({}) do |node| {title: node.text, url: node.attribute('href').value} end unless doc.css('.prev a').empty? url = doc.css('.prev a').attribute('href').value else break end end result.each_with_index do | article, i | puts "#{article[:title]} #{article[:url]}" end