railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

NokogiriでEUC-JPのサイトをパースするときにエラーになっちゃう対策 with livedoor blogの記事タイトル一覧を取得しよう

やりたいこと

ライヴドアブログの全記事タイトルとURLのリストがほしい。

実現方法

  1. 最新の記事をURLを持ってくる
  2. 「前の記事へ」リンクをたどる
  3. 「前の記事へ」リンクがページになければ終了

つまづいたこと

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

Ruby - Nokogiriで文字化けを防ぐ - Qiita

Ruby - 各種ブログサービスの過去記事を全て取得する - Qiita