[[Ruby]]
この間、HTMLのタグを自分で処理しててひどい目にあったの。やっぱり、そういうのは妹のふりして弟にやらせるか、出来合いのツールに頼るべきよね。
そしたら、rubyにnokogiriってライブラリがあるらしいと知ったから使ってみたわ。
参考にしたのは、ここね。ひとつはPDFだから気をつけて。
| Nokogiri を使った Rubyスクレイピング [初心者向けチュートリアル] | http://morizyun.github.io/blog/ruby-nokogiri-scraping-tutorial/ |
| Xpathチートシート | http://aoproj.web.fc2.com/xpath/XPath_cheatsheets_v2.pdf |
とりあえず、サンプルページからリンクを抜き出してみよっか。
#!/usr/bin/ruby -EUTF-8
require 'nokogiri'
require 'open-uri'
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
# リンクを列挙してみよう。
doc.xpath('//a').each do |node|
#p node.attributes
print <<EOM
#{node.children.inner_text} #{node.attributes["href"].value}
EOM
end
これを実行すると、こんなのが出てくるの。
"Yahoo! JAPAN"
ヘルプ http://help.yahoo.co.jp/
写真で見る「東京モーターショー」 http://motorshow.carview.yahoo.co.jp/tokyo-motorshow/2015/
露機墜落 データは爆破示唆か http://news.yahoo.co.jp/pickup/6180058
杭データ偽装「軽い気持ち」 http://news.yahoo.co.jp/pickup/6180052
車衝突 5歳児投げ出され死亡 http://news.yahoo.co.jp/pickup/6180063
米雇用統計 就業者数が大幅増 http://news.yahoo.co.jp/pickup/6180059
パラ五輪中 小中学校を休日案 http://news.yahoo.co.jp/pickup/6180046
真央SP首位 五輪「頭にある」 http://news.yahoo.co.jp/pickup/6180053
虎 球児に背番号「18」を用意 http://news.yahoo.co.jp/pickup/6180054
菜々緒の悪女役 祖母を泣かす http://news.yahoo.co.jp/pickup/6180057
もっと見る http://news.yahoo.co.jp/list/?d=20151107&mc=f&mp=f
完全復活 http://headlines.yahoo.co.jp/hl?a=20151106-00000135-spnannex-spo.view-000
ショッピング http://shopping.yahoo.co.jp/
ヤフオク! http://auctions.yahoo.co.jp/
:
:
ニュース http://news.yahoo.co.jp/
天気 http://weather.yahoo.co.jp/weather/
スポーツ http://sports.yahoo.co.jp/
ファイナンス http://finance.yahoo.co.jp/
テレビ http://tv.yahoo.co.jp/
GYAO! http://gyao.yahoo.co.jp/
Y!モバゲー http://yahoo-mbga.jp/?_ref=aff%3Dysm001
地域 http://loco.yahoo.co.jp/
地図 http://map.yahoo.co.jp/
路線 http://transit.yahoo.co.jp/
:
:
メール http://mail.yahoo.co.jp/
うーん、悪くないわね。
これで目的のサイトもうまく処理できるかしら?