サイト内の全htmlのtitle、meta description、keyword、見出しタグを一覧でcsvに書き出します。自分の環境では一応動いていますが、いろんなサイトのスクリプトを見よう見真似で作ったので他の環境でどのくらい使えるものなのかはわかりません。
自分が管理しているサイトではDescriptionやKeywordの大文字小文字が混在していたためエラーが出ました。rescueを初めて使ってみたところなんとか動きました。これが正しい使い方であればいいのですが。というかもっと簡潔にやる方法があれば教えてください。
以下の方法で使っています。
1.
Sitesucker(OSX用)でサイトをローカルに保存。(オプションで画像やサウンドファイルなどの重いファイルを除外しておかないとサイト規模によってはすごく時間がかかります。)
2.ダウンロードしたフォルダにスクリプトを持っていってそこで実行。
require 'rubygems'
require 'hpricot'
require 'open-uri'
#改行削除メソッド
def erasebr (str)
str.gsub!(/\n/, "")
end
#書き出しファイル名はドメイン名+csvtype+今日の日付
puts "ファイル名の先頭に入れる文字を入力してください!例)ドメイン名など半角英数"
name = gets.chomp
#書き出しメソッド
def makecsv (domain_name, csvtype)
#ファイル名は:ドメイン名+csvtype+タイムスタンプ
timestamp = Time.now.strftime("-%Y%m%d-%H%M%S")
csv_name = domain_name + "-" + csvtype.to_s + timestamp + ".csv"
puts "書き出しファイル名: " + csv_name
#ファイルタイプ(通常はhtml)
ext = "html"
text_array = Dir.glob("**/*.#{ext}")
open(csv_name, "w") do |f|
# 全ファイル内のtitle、description、keywords、見出し要素を取得
text_array.each do |file|
doc = Hpricot( open(file).read )
title = doc.at('title').inner_html
# casesensitiveエラーを入れ子でrescue
begin
description = doc.at('meta[@name="Description"]')['content']
rescue
begin
description = doc.at('meta[@name="description"]')['content']
rescue
description = "NO"
end
end
begin
keywords = doc.at('meta[@name="Keywords"]')['content']
rescue
begin
keywords = doc.at('meta[@name="keywords"]')['content']
rescue
keywords = "NO"
end
end
hone = doc.at('h1').inner_html
htwo = []
(doc/"h2").each do |d|
htwo << d.inner_html
end
#改行を削除
erasebr(title)
erasebr(hone)
erasebr(description)
htwo.each { |c| c.gsub!(/\n/, "")}
#要素ならべて書き込み
if csvtype == "nokwd"
s = file, ",title,#{title}", " ,description,#{description}", ",h1,#{hone}", ",h2,", htwo.join(","), "\n"
else
s = file, ",title,#{title}\n", " ,description,#{description}\n", " ,keywords,#{keywords}\n",
",h1,#{hone}\n", ",h2,", htwo.join("\n,,"), "\n\n"
end
f.write s
end
end
end
#keywordあり: kwd
#keywordなし : nokwd
makecsv(name, "kwd")
makecsv(name, "nokwd")
初さらしです。
動いた時は感動しました。