この間、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/
うーん、悪くないわね。 これで目的のサイトもうまく処理できるかしら?