Google Chromeの閲覧履歴をエクスポートする(Windows, Mac対応)


インターネットブラウザの閲覧履歴を見返していると自分の人生を振り返ってるみたいで楽しいですよね。
私の場合はChromeの履歴が2013年からのものが残っていましたが、
それ以前はIEやFireFoxなどを使っていたので残念ながら残っていませんでした。

履歴データの保存場所

履歴データは以下のディレクトリにあります

// Windowsの場合
~\AppData\Local\Google\Chrome\User Data\Default\

// Macの場合
~/Library/Application\ Support/Google/Chrome/Default/

この中にHistoryというファイルがあるので、それがChromeの履歴データになります

履歴データの中身

それでは以下のように進めていきます

// Windowsの場合
> cd '~\AppData\Local\Google\Chrome\User Data\Default\'

// Macの場合
> cd ~/Library/Application\ Support/Google/Chrome/Default/

// sqliteの中に入る
> sqlite3 History

// テーブル一覧の表示
sqlite> .tables

Historyの中には以下のようなテーブルがあります

テーブル名
downloads
download_url_chains
meta
urls
keyword_search_terms
segments
segment_usage
visits
visit_source

今回は訪問時間も欲しいのでurlsvisitsを結合して使います
urlsvisitsの構造は以下のようになっています

urls visits
id id
url url
title visit_time
visit_count from_visit
typed_count transition
last_visit_time segment_id
hidden visit_duration
favicon_id

実践

今回はcsv形式で出力しますが、他にも以下のようなものもあるそうです

mode 説明
csv カンマ区切りで出力
column カラム毎に左揃えで出力
html HTMLのTABLE形式で出力
insert INSERT文として出力
line 各カラム毎に行を分けて出力
list 区切り文字でカラムを区切り1行で出力(デフォルト)
tabs タブ区切りで出力
tcl TCLのlist形式で出力

それでは実際に出力していきます
visit_timeがUNIXタイムもどき(1601/01/01 0:00 からのマイクロ秒)になっているので一般的な形式に変換しています

// .mode [モード名] でモード指定
sqlite> .mode csv

// .output [ファイル名].csv でファイル名指定
// 今回はユーザーのホームディレクトリに保存
sqlite> .output ~/result.csv

// ヘッダーをつける
sqlite> .headers on

// 抽出
sqlite> select urls.id, datetime(visits.visit_time/1000000-11644473600,'unixepoch','localtime') as visit_time, urls.title, urls.url from visits left join urls on visits.url = urls.id order by visits.id desc;

抽出で使用したSQLの内容は以下のようになっています

select 
 urls.id,
 datetime(visits.visit_time/1000000-11644473600,'unixepoch','localtime') as visit_time, 
 urls.title, 
 urls.url 
from visits 
left join urls 
 on visits.url = urls.id 
order by visits.id desc;

sqliteを抜けるとホームディレクトリにresult.csvというファイルができています。

もしError: database is lockedと出たら一度Google Chromeを終了してから、もう一度試す、
もしくは、Historyファイルを別名でコピーしたものに対して実施してみてください。

以上です。