[[Ruby]]


Rubyでも簡単にスクレイピングはできるわ。

サンプルとして、[[.NET]]の『[[Xpathでスクレイピング]] 』同様、『小説家になろう』サイトの小説を抽出してみるわね。

* 使うモジュール [#n748baec]

Nokogiri を使うわ。インストールは以下の通りね。

** Debian GNU/Linuxの場合 [#kb419f93]

 # apt-get install ruby-nokogiri

** Cygwinの場合 [#sc12a8df]

たぶん、nokogiriパッケージがあると思います。

** その他 [#s296d88f]

gemで入れるのがいいかしら?

 # gem install nokogiri

そのほか注意点としては、rbenvを入れている場合はどのrubyにいれるのかとか、よく考えた方がいいくらいかしらね。


* サンプルコード [#s229441e]

Xpathがどうとかnodeがどうとかって解説は他のもっと素晴らしいサイトにお任せするわね。

なお、以下のサンプルURLのアクセス先にある三文小説だけど、ここの管理人の書いたものだから、ないと思うけど問い合わせはそちらによろしくね。

 #!/usr/bin/ruby
 # encoding: utf-8
 
 require 'nokogiri'
 require 'open-uri'
 
 ans = []
 title = nil
 
 begin
   url = "http://ncode.syosetu.com/n3170ch/8/"
   p url
   x = ""
   open(url).each{|d|
     x += d.clone
   }
   doc = Nokogiri.HTML(x)
 rescue
   doc = Nokogiri.HTML("<html><body><p>異常終了</p></body></html>")
   ans[ans.length] = "Nokogiri異常終了"
 end
 
 begin
   title = doc.xpath("//title").inner_text
 rescue
   title = "不明"
 end
 
 begin
   doc.xpath("//div[@class='novel_view']").each do |node|
     next if node.children.inner_text == nil
     aa = node.inner_text.clone
     aa.gsub! /(\ | |\t|\r)/,''
     ans.push(aa.clone)
   end
   ans.each{|x|
     print x+"\n"
   }
   print "「#{title}」 ここまで\n"
 rescue
   p "あら?"
 end


* 実行例 [#g641c24d]

 $ ruby  test.rb
 "http://ncode.syosetu.com/n3170ch/8/"
 :
 :(本文)
 :
 「異世界ドライブ旅行記 - 拾いました。」 ここまで
 $


うん。いけたみたいね。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS