Rubyでスクレイピングをしてみよう!
Rubyでスクレイピングをしてみよう!
Scrapingでできること
・店舗一覧、商品一覧を抽出する ・ニュースサイトからヘッドライン一覧を抽出する ・ページのURLを全て抽出する などなど今まで煩わしかったことが解消できます!
Rubyの開発環境
すでにRubyをインストール済みであればこの章を飛ばしてもらって大丈夫です。
1.rbenvのインストール
1.gitが入っているか確認しましょう。入っていなければインストール。
http://git-scm.com/download/mac
sudo yum -y install git
2.rbenvをgithubからclone,インストールしましょう
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
3.環境変数を作成しrbenvの環境を整えましょう。
# PATH に追加 $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile # .bash_profile に追加 $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile # 上記設定の再読み込み $ exec $SHELL -l
4.rbenvが入っているか確認しましょう
$ rbenv --version rbenv 0.4.0-74-g95a039a
5.ruby-buildをインストールしましょう
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
クローンしてもインストールされていない場合は
~/.rbenv/plugins/ruby-build/install.sh
をしましょう。
6.rubyの最新版を確認しましょう
$ rbenv install --list Available versions: 1.8.6-p383 1.8.6-p420 1.8.7-p249 : : 2.2.0 2.2.1 2.2.2 2.2.3 ← こいつが2.2系の最新版っぽい :
7.ruby のインストールをしましょう 先ほどのバージョンを指定しましょう。
$ rbenv install -v 2.2.3
8.ruby のバージョン指定をしましょう
$ rbenv rehash
$ rbenv versions * system (set by /home/vagrant/.rbenv/version) 2.0.0-p353
systemが付いているバージョンが現在使用されているものです
rbenv global 2.2.3
最後に正しくsystemのところに2.2.3が来ていることを確認しましょう。
ruby -v
2.Nokogiriをインストール
rubyでスクレイピングをするにはNokogiriが必須です。Nokogiriについてはここで詳しく説明されていますので気になったら見てみると良いですね。
またgemのインストールにbundle
, home brew
を使うので予めインストールしておきましょう。
1.Nokogiriのインストール
gem install nokogiri
Railsを使わなければこれだけで大丈夫です。
Railsのプロジェクトで使う場合はGemfile
に
gem install nokogiri
と書きましょう。 次にターミナルでGemをインストールしましょう。
bundle install
3.とりあえずサンプルプログラムを使ってみよう!
3.1 ホームページタイトルの取得
以上環境設定が終わりましたので次にサンプルプログラムを使って、どのコードがどのような役割を担っているのか見てみましょう
まずscrape_yahoo_title.rb
というファイルを作成し、下記のコードをコピペして貼り付けて見ましょう。
# URLにアクセスするためのライブラリの読み込み require 'open-uri' # Nokogiriライブラリの読み込み require 'nokogiri' # スクレイピング先のURL url = 'http://www.yahoo.co.jp/' charset = nil html = open(url) do |f| charset = f.charset # 文字種別を取得 f.read # htmlを読み込んで変数htmlに渡す end # htmlをパース(解析)してオブジェクトを生成 doc = Nokogiri::HTML.parse(html, nil, charset) # タイトルを表示 p doc.title
作成したら、ターミナルで下記のコマンドを実行してみましょう。
ruby scrape_yahoo_title.rb
すると以下の様な結果が帰ってくれば成功です。
"Yahoo! JAPAN"
課題1 早稲田大学のホームページからタイトル「早稲田大学」を取得してみましょう。http://www.waseda.jp/top/
3.2 タイトル、画像一覧の取得
まず、ファイルad_navi.rb
を作成します。作成したファイルをエディタで開いて次のようなソースを書きます。
require 'open-uri' require 'nokogiri' # スクレイピング先のURL url = 'http://ad-navi.sendenkaigi.com/actor_company/' charset = nil html = open(url) do |f| charset = f.charset # 文字種別を取得 f.read # htmlを読み込んで変数htmlに渡す end # htmlをパース(解析)してオブジェクトを作成 doc = Nokogiri::HTML.parse(html, nil, charset) doc.xpath('//div[@class="corp_data2"]').each do |node| p node.css('p[1]').inner_text p node.css('p.right.nomal').inner_text.match(/[0-9]+人/).to_s.to_i p node.css('dl[3]/dd').inner_text end
作成したら、ターミナルで以下のコマンドにより実行できます。
ruby ad_navi.rb
実行するとこのようが結果になるはずです。
"BBDO J WEST株式会社" 48 "福岡県/広島県/沖縄県/山口県" "株式会社Gunosy" 70 "東京都" "株式会社アズライフ" 42 "東京都" "Glossom株式会社" 80 "東京都" "株式会社ハタジルシ" 5 "東京都" "アイビスティ有限会社" 4 "東京都" ...
課題2 早稲田大学のニュースページからニュースのタイトルと画像の一覧を取得してみましょう。http://www.waseda.jp/top/news
Pythonでのスクレイピングについても書いたので是非読んでください!
実践 Webスクレイピング&クローリング-オープンデータ時代の収集・整形テクニック
- 作者: nezuq,東京スクラッパー(協力)
- 出版社/メーカー: マイナビ
- 発売日: 2015/08/28
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック
- 作者: クジラ飛行机
- 出版社/メーカー: ソシム
- 発売日: 2015/08/31
- メディア: 単行本
- この商品を含むブログ (2件) を見る