Nokogiri を使った Rubyスクレイピング [初心者向けチュートリアル]を先に読みましょう。
実行環境
- OS X El Capitan バージョン 10.11.4
- ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
- Nokogiri (1.6.7.2)
今回スクレイピングするページ
岩手県の各地域の天気をスクレイピングしてみます。
実装
weather.rb
# URLにアクセスするためのライブラリの読み込み
require 'open-uri'
# Nokogiriライブラリの読み込み
require 'nokogiri'
# スクレイピング先のURL
url ='http://www.tenki.jp/forecast/2/6/'
charset = nil
html = open(url) do |f|
charset = f.charset # 文字種別を取得
f.read # htmlを読み込んで変数htmlに渡す
end
# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)
# 日付
puts doc.xpath('//p[@id="forecast_public_date"]').inner_text
doc.xpath('//a[@class="forecast_map_entry"]', '//ul[@id="forecast_list_entries"]/li[position()<8]/a').each do |node|
# 場所
place = node.child.inner_text
# 天気
weather = node.css('img').attribute('title').value
# 降水確率
probability = node.css('span.probPrecip').inner_text
puts "#{place}の天気は#{weather}で降水確率は#{probability}です。"
end
実行結果
05月08日(日)
盛岡市の天気は晴で降水確率は0%です。
宮古市の天気は晴で降水確率は0%です。
大船渡市の天気は晴で降水確率は0%です。
花巻市の天気は晴で降水確率は0%です。
久慈市の天気は晴で降水確率は0%です。
一関市の天気は晴で降水確率は0%です。
北上市の天気は晴で降水確率は0%です。
釜石市の天気は晴で降水確率は0%です。
二戸市の天気は晴で降水確率は0%です。
八幡平市の天気は晴で降水確率は0%です。
奥州市の天気は晴で降水確率は0%です。
雫石町の天気は晴で降水確率は0%です。
遠野市の天気は晴で降水確率は0%です。
滝沢市の天気は晴で降水確率は0%です。
紫波町の天気は晴で降水確率は0%です。
平泉町の天気は晴で降水確率は0%です。
岩手町の天気は晴で降水確率は0%です。
岩泉町の天気は晴で降水確率は0%です。
軽米町の天気は晴で降水確率は0%です。
無事スクレイピングできました!
XPathに頼らない方法
ここでは、遠野市から軽米町までをスクレイピングしてみます。
実装
weather2.rb
# URLにアクセスするためのライブラリの読み込み
require 'open-uri'
# Nokogiriライブラリの読み込み
require 'nokogiri'
# スクレイピング先のURL
url ='http://www.tenki.jp/forecast/2/6/'
charset = nil
html = open(url) do |f|
charset = f.charset # 文字種別を取得
f.read # htmlを読み込んで変数htmlに渡す
end
# htmlをパース(解析)してオブジェクトを作成
doc = Nokogiri::HTML.parse(html, nil, charset)
# 日付
puts doc.xpath('//p[@id="forecast_public_date"]').inner_text
doc.xpath('//ul[@id="forecast_list_entries"]/li/a')[0, 7].each do |node|
# 場所
place = node.child.inner_text
# 天気
weather = node.css('img').attribute('title').value
# 降水確率
probability = node.css('span.probPrecip').inner_text
puts "#{place}の天気は#{weather}で降水確率は#{probability}です。"
end
実行結果
05月08日(日)
遠野市の天気は晴で降水確率は0%です。
滝沢市の天気は晴で降水確率は0%です。
紫波町の天気は晴で降水確率は0%です。
平泉町の天気は晴で降水確率は0%です。
岩手町の天気は晴で降水確率は0%です。
岩泉町の天気は晴で降水確率は0%です。
軽米町の天気は晴で降水確率は0%です。