Ruby で html の meta 情報を抽出するツールを作ってみる

eyecatch_ruby

年始の休みを利用してちょっと作ってみた。

ウェブサイトを制作していると 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 って記述してないのね。

 あとがき

まだこのままだとあまり便利じゃないので、もうちょっとチューニングしたいと思う。

ちゃんとしたツールならエラーの時の処理とか、ちゃんとファイルに書き出すとかした方がいいよね。

ちなみに、お師匠に聞いてみたら、数分で別の書き方をした便利なスクリプトを用意してくれた。すごいなー。これだけで何時間かかったのかって話だよ。たいぶ色々忘れてた。ちゃんと勉強しないといけませんなぁ。

東京都内で仕事をしています。猫飼いたいです。30歳からピアノ始めたおじさんです。盆栽にも興味が出てきました。
最近ブログ用のTwitterアカウントを作成したので、是非フォローをしてください。@zakkiboooks

 コメントをどうぞ

  • 入力いただいたメールアドレスは公開されませんが、このブログが置いてあるサーバーに保存されます。
  • 入力いただいた情報の他に、WordPress の機能により IPアドレス を取得させていただきます。取得した IPアドレス はスパムコメントの対処ために利用され、公開することはありません。
  • 個人情報などを記入された場合、投稿いただいたコメントを表示しないか、該当箇所を編集して公開する可能性があります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。