Google or Bingから画像を収集する
- 検索サイトで画像検索を行い、取得した画像をローカルにダウンロードする
- ダウンロードした画像がすでに保存されている画像と同じものだった場合は保存しない
一度ダウンロードしてから画像の比較を行うため、通信料の削減にはならない- ダウンロード前に比較するようにしたため、多少ましになりました
- 処理済みのURLはチェック対象から外れるようになりました
- 一度ダウンロードした画像はDBを消さない限り二度とダウンロードされません
- ダウンロード前にURLをウイルススキャンする機能が追加されました(後述)
Python 3.7で動作確認済み
- requests
- beautifulsoup4
- lxml
Anacondaで仮想環境を作成した場合
/Anaconda3/envs/【作成した環境名】/src/
/Anaconda3/envs/【作成した環境名】/Lib/site-packages/importpath.pth
自分の環境に合わせてパスを書き換える
プロキシの設定が必要な場合はCommonConst.pyの【PROXIES】を変更する
変更する場合はCommonConst.pyの【DATA_DIR】を変更する
パラメータは4つ
- 実行ファイル名:SearchEngineClass.pyを指定
- 検索サイト:google or bingを指定
- 検索キーワード:画像検索で使用するキーワードを指定
- 取得枚数:ダウンロードする枚数を指定
python SearchEngineClass.py google 猫 10
→Google画像検索で猫を検索し、画像を10枚ダウンロードする
python SearchEngineClass.py bing "猫 黒い" 100
→2つのキーワードを使用し、bingから画像を100枚ダウンロードする
簡易ウイルススキャン機能を追加しました。
利用する場合は、VirusTotalでアカウントを作成し、APIKeyをCommonConst.pyに追加してください。
APIKeyは右上のユーザーアイコン>設定>APIキーにあります。
ただしこの機能、無料アカウントだと実用には程遠いほど遅いです。。。
1回スキャンするたびに、スキャン実行+レポート取得で2リクエストするのですが、無料アカウントだと1分間に4リクエスト=画像2枚しか処理できません。。。
もし本気でスキャンを使いたい方は、有料アカウントをおすすめします。
検索時にライセンスのフィルターをかけているため、版権系の画像はほとんどヒットしないと思われる
コメントアウト済み
フィルターを無効化する場合は、【def query_gen】の以下をコメントアウトする
# Googleの場合
while True:
params = urllib.parse.urlencode({
'q':keyword,
'tbm':'isch',
# 'tbs':'sur:fc',
'ijn':str(page)})
yield SEARCH_URL[site] + '?' + params
page += 1
# Bingの場合
while True:
params = urllib.parse.urlencode({
'q':keyword,
# 'qft':'+filterui:license-L1',
'first':str(item)})
yield SEARCH_URL[site] + '?' + params
time.sleep(1)
item += self.item_count