Ruby で html の meta 情報を抽出するツールを作ってみる
年始の休みを利用してちょっと作ってみた。
ウェブサイトを制作していると meta keywords , description を確認(検証的な意味で)する機会ってあると思うんですけど、手元に制作している html ファイル一式が手元にあるときはテキストエディタとかで検索というか grep でいいんだけど、インターネット上で確認しないといけない時、結構面倒なんですよね。
HTML ファイルの取得と単純な加工
Ruby の勉強始めて見たものの、半年くらい放置してた「楽しいRuby」を引っ張り出してきた。
第22章 P431 のスクリプトをベースにしてみる。
HTML の取得
とりあえずヤフーを対象に・・・
require "open-uri"
url = "http://www.yahoo.co.jp/"
filename = "sample.html"
File.open(filename , "w") do |f|
text = open(url).read
f.write text
end
sample.html というファイルができて、中身はヤフーのソースになってます。
参考:BASIC認証アリのページにアクセスする場合
–>Ruby open-uri を使って BASIC認証ページにアクセスする場合
HTML の加工
次のスクリプトで sample.html の特定の場所を抽出する。
htmlfile = "sample.html"
textfile = "sample.text"
html = File.read(htmlfile)
File.open(textfile , "w") do |f|
headinfo = true
html.each_line do |line|
if headinfo && // =~ line
# =~ 正規表現のメソッド。正規表現と文字列をマッチさせる。
# で処理を終了
f.write line
end
end
meta の記述が始まったところから処理が終わるところ(の行の手前)まで取得し、sample.text に記述します。
meta系の記述だけでなくて、OGP とか色々とヘッド内の情報をまるっと取得するにはこのスクリプトでもいいかもですね。あとは複数の URL を読み込んで複数のページに対してスクリプトを実行出来るようにできればいい感じ。
複数の URL を読み込めるようにする
前述したスクリプトはあくまでお勉強用のスクリプトなので、ちょっと加工。
URL の取得のところで直接 URL を書いていたところを、ファイルを読み込むようにしてみる。
url = "http://www.yahoo.co.jp/"
# 上記の部分を以下のように。
url = File.read("list.txt",:encoding => Encoding::UTF_8)
# list.txt には適当に URL を書いておく。
# http://www.yahoo.co.jp/
# http://auctions.yahoo.co.jp/
# とか。
これで複数の URL を別ファイルから読み込むようになったので、各 URL 毎に処理されるようにしておく。
require "open-uri"
url = File.read("list.txt",:encoding => Encoding::UTF_8)
url.split("\n").each do |u|
#
# この辺りに HTML を読み込んでテキストを抽出する処理を書く
#
end
「meta name」の記述がある部分を抜き出す
前述の「この辺りに HTML を読み込んでテキストを抽出する処理を書く」の部分を考える。
require "open-uri"
url = File.read("list.txt" , :encoding => Encoding::UTF_8)
url.split("\n").each do |u|
htmlsource = open(u).read
htmlsource.each_line do |line|
if // =~ line
puts line
end
end
という感じにして実行してみると
<meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。">
<meta name="description" content="ヤフオク!は、いつでも、どこでも、簡単に売り買いが楽しめる、日本最大級のネットオークションサイトです。新品から新古・中古・アウトレット・訳ありまで、ヤフオク!にしかないお買得商品がいっぱい。">
を取得できる。
Yahoo! サイトはあれなのね、meta keywords って記述してないのね。
あとがき
まだこのままだとあまり便利じゃないので、もうちょっとチューニングしたいと思う。
ちゃんとしたツールならエラーの時の処理とか、ちゃんとファイルに書き出すとかした方がいいよね。
ちなみに、お師匠に聞いてみたら、数分で別の書き方をした便利なスクリプトを用意してくれた。すごいなー。これだけで何時間かかったのかって話だよ。たいぶ色々忘れてた。ちゃんと勉強しないといけませんなぁ。