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

WWW::Mechanizeで青空文庫の一覧を得る

[Ruby] 青空文庫の作品一覧のhtmlファイルを配列として得る
http://rubyist.g.hatena.ne.jp/muscovyduck/20070205/p1

をWWW::Mechanizeを使ってやりました。

require 'rubygems'
require 'mechanize'

$KCODE = 'utf-8'

agent = WWW::Mechanize.new
page = agent.get('http://www.aozora.gr.jp/index_pages/index_top.html')

aiu_links =
    page.links.select {|link| link.href =~ /\Asakuhin_[a-z]+\d+\.html\z/ }

aiu_indices = aiu_links.map {|link| link.href }

aiu_links.each do |link|
  sleep 30 # 追記
  aiu_indices.concat(link.click.links \
               .select {|l| l.href =~ /\Asakuhin_[a-z]+\d+\.html\z/ } \
               .map {|l| l.href }.uniq)
end

p aiu_indices.uniq.sort

コードはシンプルに書けるのだけどWWW::Mechanizeは遅すぎ。あとオブジェクトの出力が見づらすぎる。Formを操作したり,User-Agentをごまかしたりするには有用なライブラリなだけにそこが何とかならないかなぁ…。

追記

ちょっとマナー違反だった。aiu_links.eachのブロック内でsleep(30)とかしないと…。