WEB スクレーピングとその応用 |
作成日: 2012-11-11 最終更新日: |
WEB スクレーピング(WEB スクレイピング, Web scraping )とは、 WEB 画面に表示される情報を何らかのプログラムを使って評価して必要な情報を得ることである。 誤解のない範囲内で、単にスクレーピング(スクレイピング)と呼ばれることもある。 ここでは、google 検索で指定したキーワードを含むページが何件あるか、 概算を拾って表示するプログラムを開発する。
もともとは、自分の興味で「発音について」を作り始めたとき、 二つの読み方を比較するのに都合がいいプログラムが見当たらず、自分で作らないといけないことから始まった。
キーワードを決め打ちして、そのキーワードが含まれるページ数を表示する。 ここでのキーワードは esperanto である。 ページ数は、「約***件」から抜き取っている。 つたないプログラムだが、気分を理解してもらいたい。
# scraping.rb
require 'open-uri'
url = 'http://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&q=esperanto'
page = open(url)
text = page.read
print text.scan(/約 .* 件/)
コマンド
ruby -Ku scraping.rb
実行結果
["約 32,400,000 件"]
こんどは、検索の単語を日本語まで拡大する。
今回は単語は「二重焼き」である(広島では今川焼きのことをこのようにいう)。
前回と同じように、
url = 'http://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&q=二重焼'
としてみると、これでは当然エラーが出る。URI::InvalidURIError 例外というエラーだ。
このエラーを除くには、日本語のエンコーディングをしなければならない。
エンコードのついでに、少しコードを修正した。
require 'open-uri'
require 'cgi'
keywords = ['今川焼き', '二重焼き']
keywords.each { |a_keyword|
url = 'http://www.google.co.jp/search?ie=UTF-8&oe=UTF-8&q=' + CGI.escape('"'+a_keyword+'"')
text = open(url).read
}
text.scan(/約 ([\d\,]+?) 件/)
print a_keyword + " 約" + $1 + "件\n"
実行結果は次の通りである。
今川焼き 約 1,240,000 件
二重焼き 約 28,800 件
追って書く予定である(2014-11-30)。
まりんきょ学問所 > Rubyの浮き輪 > WEB スクレーピングとその応用