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

前回作ったスクリプト(Ruby で html の meta 情報を抽出するツールを作ってみる)でもまぁいいんだけど、あのままだと場合によってはその後さらにテキストの加工が必要だったりするので、もっとピンポイントに特定のメタ情報だったりを取得したい。

meta keywords と description を取得する

色々書き方はあるんだろうけど、師匠(誰)のものを参考に以下みたいに書いてみた。

require "open-uri"

url = File.read("list.txt",:encoding => Encoding::UTF_8)
url.split("\n").each do |u|
	htmlsource = open(u).read
	log = []
	log << u
		htmlsource.scan(//).each do |s|
			log << s.match(/content=['"](.*?)['"]/)[1] if s.match(/name=['"](keyword|keywords)['"]/)
		end
		htmlsource.scan(//).each do |s|
			log << s.match(/content=['"](.*?)['"]/)[1] if s.match(/name=['"](description)['"]/)
		end
	puts log
end

変わらず list.txt には取得しに行きたい URL を列記しておいて、取ってきた html ソースからメタ情報部分を .scan して .match したものを吐き出す感じ。

例えば、list.html に

http://www.yahoo.co.jp/
http://www.kantei.go.jp/
http://japan.cnet.com/
http://www.gov-online.go.jp/

を書いておくと、

http://www.yahoo.co.jp/
日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。
http://www.kantei.go.jp/
首相官邸,政府,内閣,総理,内閣官房
首相官邸のホームページです。内閣や総理大臣に関する情報をご覧になれます。
http://japan.cnet.com/
テクノロジー&ビジネス情報のメディアサイト。ニュースだけでなく、オピニオンリーダーによるコラムやインタビュー、ブログなども掲載
http://www.gov-online.go.jp/
内閣府,政府,政府広報,広聴,ポータル,省庁,お役立ち,国民生活
政府の広報・広聴活動をまとめたポータルサイト。内閣府大臣官房政府広報室が運営。

が取得出来る。

puts log

のところを

puts log.join("\t")

としてあげると、エクセルとかにコピペし易くなるかも。

この辺りを参考に。

ファイルに書き出す

別にコピペすれば済むのでファイルにする必要もないんじゃないかとも思うけど

# coding: utf-8

require "open-uri"
require "csv"

url = File.read("list.txt",:encoding => Encoding::UTF_8)

CSV.open("meta.csv","wb") do |csv|
	url.split("\n").each do |u|
		htmlsource = open(u).read
		log = []
		log << u
			htmlsource.scan(//).each do |s|
				log << s.match(/content=['"](.*?)['"]/)[1] if s.match(/name=['"](keyword|keywords)['"]/)
			end
			htmlsource.scan(//).each do |s|
				log << s.match(/content=['"](.*?)['"]/)[1] if s.match(/name=['"](description)['"]/)
			end
		csv << log
	end
end

でめでたく.csvファイルが出来上がります。

http://www.yahoo.co.jp/,日本最大級のポータルサイト。検索、オークション、ニュース、メール、コミュニティ、ショッピング、など80以上のサービスを展開。あなたの生活をより豊かにする「ライフ・エンジン」を目指していきます。
http://www.kantei.go.jp/,"首相官邸,政府,内閣,総理,内閣官房",首相官邸のホームページです。内閣や総理大臣に関する情報をご覧になれます。
http://japan.cnet.com/,テクノロジー&ビジネス情報のメディアサイト。ニュースだけでなく、オピニオンリーダーによるコラムやインタビュー、ブログなども掲載
http://www.gov-online.go.jp/,"内閣府,政府,政府広報,広聴,ポータル,省庁,お役立ち,国民生活",政府の広報・広聴活動をまとめたポータルサイト。内閣府大臣官房政府広報室が運営。

ん・・・と(↑見辛いけど)これだと、html ページ側に keywords , description が無いと列がズレるわ・・・。

なんか処理追加しないといけないすね。

Ruby で出力した CSV が文字化けする

出力した CSV を Mac のテキストエディタで開くときは問題ないのだけど、Windows の Excel で開くと文字化けしてる。

なんなんだこれは。

  1. まず UTF-8 で吐いた csv を Excel で開いてみます。化けます。
  2. 仕方がないので BOM をつけてみます。 Win だと正しく開けました!でも Mac で化けます。
  3. それならと UTF-16LE で吐いてみましょう。Win/Mac どちらも化けずに表示されました!これで大丈夫かと思いきやなんとカンマ区切りされず A 列に 1 行まるごと収まっています。死にます。
  4. 仕方がないので tsv で出力してみましょう。すごい!ちゃんと表示されています!でも .tsv はデフォルトでは Excel には関連付けられていないのでダブルクリックでは開けません!これでは .tsv とか意味わからんファイル出力してんじゃねーよ死ねよとか怒られてしまいます。
  5. ならばと拡張子を .csv に偽装してみましょう。なんと正しく表示されました!これなら怒られないし完璧ですね!あれ、でもこれ csv じゃない!!!

Win/Mac どちらの Excel でも正しく開ける Unicode な csv の出力方法 - Qiita

ということで、一般的には Windows Excel 向けに作ればいいんじゃないかな、、、ってもわかんないから今日はこの辺で、、、

コメントを残す

  • コメント欄には個人情報を入力しないようにしてください。

  • 入力いただいたメールアドレスは公開されませんがサーバーに保存されます。
  • 入力いただいた情報の他に、IPアドレスを取得させていただきます。取得した IPアドレス はスパム・荒らしコメント対処ために利用され、公開することはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください