[[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/"
:
:(本文)
:
「異世界ドライブ旅行記 - 拾いました。」 ここまで
$
うん。いけたみたいね。