Anki用画像調達 スクレイピング(google画像検索画面のスクショ)試行錯誤の記録
語学などの学習で暗記する際、楽に効率的に暗記していきたい。
Ankiというアプリがあるが、これは暗記カードアプリで、教材をほぼゼロからカスタマイズできる。
教材には画像も入れることができる。
例えば単語。
もしグーグル検索で引っかかった画像がいくつか暗記カードに入っていたら、かなりイメージしやすい。
しかしめちゃくちゃ時間かかりそう、無理。
それを自動でやってくれるプログラム?を見つけた。
これをやろうと試行錯誤した記録を残しておく。
完全なるメモで人に見せる形ではないものの、自分や誰かの手助けになるかもしれない。
こういう勝手にネットで検索して情報収集してくれるのをスクレイピングというようです。
ここにたどり着くまでに数時間はかかった気がする。
とりあえずやってみようと思う。
【私のスペック】
一言でいうと、プログラミングはさっぱり。
平成中期にHTMLとCSSを苦労して使ってホームページを運営していた程度。
【うちのPC】
わからんけどなんかそれぽい部分書いておけばきっと役にたつ。
Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz 3.20 GHz
実装RAM16.0 GB
Windows 10 Home
python3.9.6
googledriverをネットからダウンロード
ちゃんとバージョンはchromeと合わせた。
以下に置いてみた
C:\Users\*私の名前*\AppData\Local\Programs\Python\Python39\Scripts
コマンドプロントを立ち上げる
pip install Pillow
Pillow、selenium、あとなんだっけ、とかを打ち込んでいく
(なんかそいういうソフトをインストールするコマンドらしい)
Pillowて何?
.pyて何?
bulk-screen-capture.py の中身を読んでいく。
調べていくと全く同じことをやった方を発見。
当然ですがわたしなどより知識があるようで、消す場所追加する場所もはっきりしておられる。
この質問は途中で見つけたので、下の調べた部分はもっと後進的というかよくわかっていないことをしています。
# -*- coding: utf-8 -*-
import sys
# START: Frawned approach to change default encoding
# But I intentionally take this approach since it's easy and believe it non-problematic in this limited program.
# See discussion detail here.
# https://stackoverflow.com/questions/3828723/why-should-we-not-use-sys-setdefaultencodingutf-8-in-a-py-script
reload(sys)
sys.setdefaultencoding('UTF8')
# END: Frawned approach to change default encoding
消す。
stringI0がないとのこと
このバージョンにはないから別の機能使えみたいなエラーですかね…
import StringIO
↓
from io import StringIO
とりあえずいけるとこまで無謀にも読み込んでみた。
43行目
インデントがそろってませんとのこと。
いや4つですし。
いままでコマンドプロントダイレクト入力でしたが、
python.exeから入力しても同じ。当然か。
わけわからんので、とりあえず置いといて、
ちょっと戻ってそれぞれ何してるか定義を読んでいく。
def…関数の定義。
def f(x)= って感じかな。まずX=とする、これをY=X+********に代入して…ていう感じかなあ。
と思っていたらそのようだ。このサイトわかりやすいな。半分しか理解できなかったけど、とても助かる。超初心者にはありがたい。
def mkdir_p(path):
フォルダを作るらしい。
Try以降は、繰り返し処理時に同じフォルダに既にフォルダがあると無理!というのを避ける内容らしい。
バージョンの違いで書き方に差があるらしいがあとでうまくいかなかったら直そう。
pathてなに?
じゃあ本文のpathってところは私がpathを指定しなければならないのでは?
という疑問が残るが…
この定義を使うときにわかるか…。
ところでピリオド、アンダーバー、スラッシュってどう違うのか?
アンダーバー…自分用の関数の名づけなどに使える
バックスラッシュ…windowsでは改行とかタブの意味になってしまうらしい。パスの指定とかで\が入っているとうまく動かなくなるのでスラッシュに書き換えが必要。
¥はバックスラッシュの日本語変換版のよう。つまり¥=バックスラッシュ?
re.search…文字列にパターンとマッチする部分があるかを調べる
('[^\w\.\-_]', text): 英数字とかが入ってるテキストだったら
hashlib.sha256ハッシュ値(16進形式文字列)を求める
()の中にutf-8とあるのは日本語でもエラー出さない為
こういう解釈であってますか…?
この定義は長いので区切りながら解読しよう。
os.path.join ()の中の,カンマで区切られた文字列を結合する
このドットって何?
→パソコンで言ったら大フォルダの中のフォルダ、みたいなものらしい。
Options.dir
で、これどこ指すの?
わからないので飛ばす。
"%s.jpg" …… 文字列.jpg として出力。
% get_filename(Options.prefix + word)
ここで指定した値が上の部分の「文字列」に変換されるらしい。
Options.prefix + word
意味が全く分からず検索してもうまく出てこない。
飛ばす。
idx = "%03d" % (idx + 1)
idx= … a=a+1 という1を足す関数らしい。
%03d … dが10進法で、03の3は3桁整数で、という意味のよう。
単語帳が1000単語だったら1000個目だけ4桁にならないか?
とりあえずいまはこのままで。
os.path.isfile(fname) …fnameというファイル名が存在しているか確認している
Options.force_save
不明。
fnameというファイル名が存在していて、かつOptions.force_saveがfalseだと
グーグル立ち上げ→検索→クリック→スクショ
グーグル検索画像を保存。