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