断り
これは4年ほど前に書いた記事です。
当時は別のアカウントで公開していましたが、アカウントを移行することになったので、こちらに改めて投稿しています。
内容は学部生の頃に書いたもので、コードもだいぶ拙いところがあると思いますが、その点はご容赦ください。
動機
netflixで洋画を見たり、英語のサイトで知らない単語が出てくるたびに、調べてブックマークするけど、復習をしないのでブックマークの数だけどんどん増えていく。なんとかしたいな
全体像
長くなりそうなので全3回に分ける
1.ブックマークからurl取得
2.urlをもとにスクレイピング,1と2を連結
3.(おまけ)スクレイピングした情報をgooglespreadsheetに出力
今回
- 単語をブックマークして、一つのフォルダにまとめる
- 1のフォルダからurlを取得
- 単語をスクレイピング
- googlespreadsheetにまとめる
[1-1]下準備
weblioをブックマークして一つのフォルダにまとめておきます。
このようにブックマークバーの一番初めに置いておくと楽かもしれません。
ちなみに、場所はどこでもいいのですが、後でブックマークのpathを指定するのでわかりやすい場所がいいと思います
ブックマークのデータの格納場所 確認
この確認はしてもしなくても問題ないとは思いますが、確認したい人は以下のコマンドで確認してください
windowsの場合コマンドプロンプトから
C:\Users\user>cd AppData\\Local\\Google\\Chrome\\User Data\\Default
C:\Users\user\AppData\Local\Google\Chrome\User Data\Default>dir
とするといろいろ出てきますが、その中に
2022/05/27 22:08 472,473 Bookmarks
のようなものがあるのでブックマークのデータの格納場所が
'\\Users\\{username}\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Bookmarks'
であることが確認できます。
エクスプローラから確認する場合には、隠しファイルを表示する必要があります
また、まっくの場合は
/Users/{ユーザ名}/Library/Application Support/Google/Chrome/Default/Bookmarks
となるようです。
コード
とりあえず全文(PCのユーザ名は変更してください)
import json
bookmark_path = '\\Users\\PCのユーザ名\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Bookmarks'
with open(bookmark_path,encoding = 'utf-8_sig') as f:
bookmark_data = json.load(f)
bookmarks = bookmark_data['roots']['bookmark_bar']['children'][0]['children']
def get_weblio_url(bookmark):
if 'Weblio' in bookmark['name']:#Wは大文字
return bookmark['url']
urls = filter(lambda url:url is not None, list(map(get_weblio_url,bookmarks)) )
print(list(urls))
ブックマークからURL取得
bookmark_path = '\\Users\\PCのユーザ名\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Bookmarks'
with open(bookmark_path,encoding = 'utf-8_sig') as f:
bookmark_data = json.load(f)
jsonファイルを開いてbookmark_dataという変数に代入します。pythonではjsonファイルを辞書型で扱うことに注意してください。
print(type(bookmark_data))
として確認してみてください。
bookmarks = bookmark_data['roots']['bookmark_bar']['children'][0]['children']
ブックマークフォルダの内容をbookmarksに代入します。(僕の場合は[1-1]で見せたweblioというフォルダ)
['bookmark_bar']['children'][0]['children'] は
['bookmark_bar'] ・・・ ブックマークバー
['children'] ・・・ の中の
[0] ・・・ 0番目のフォルダ
['children'] ・・・ の中の
のように読むと目当てのフォルダを指定しやすいと思います。
def get_weblio_url(bookmark):
if 'Weblio' in bookmark['name']:#Wは大文字
return bookmark['url']
関数を定義します。
名前の中に'Weblio'という文字が入って入ればブックマーク先のURLを返すといった関数です。
こうすることで、weblio以外をブックマークしてしまった際、エラーを防げます。
urls = filter(lambda url:url is not None, list(map(get_weblio_url,bookmarks)) )
さっき定義した関数を使ってweblioのurlのみ取得します
参考