Ruby

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

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

使うモジュール

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

Debian GNU/Linuxの場合

# apt-get install ruby-nokogiri

Cygwinの場合

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

その他

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

# gem install nokogiri

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

サンプルコード

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

実行例

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

うん。いけたみたいね。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-01 (火) 14:03:03