スクレイピングで画像収集
目的
GoogleがTensorFlowや、Cloud Vision APIを公開してるみたい。これらを使って、画像中から(できればリアルタイムで)物体検出をしてみたい。そのための学習用の画像を集める。
技術選定
スクレイピング系だとPythonの情報が多い。自分もそんなイメージあったけど、なんで?そういうライブラリ充実してんのかな。
この辺りを参考にしていく。
環境構築
pipはピップと読むらしい。この辺を参考にしてみるか。
後方互換性ないのか。Python2を使う理由は今のところない。
zipimport.ZipImportError: can't decompress data; zlib not available
は
xcode-select --install
で回避。
クローリングとスクレイピング
momijiame.tumblr.comどうやら二つの意味は違うみたい。ウェブスクレイピングは厳密には各ページを順番に辿っていくクローリングとページから情報を抽出するスクレイピングの二つのパートに分かれている。
まあ、通りでPython スクレイピング
だと、ページ送りに関する情報が出てこないなと思った。
matchとsearch
BeautifulSoup4でスクレイピングしていくのだけど、細かなデータの取得には正規表現を使いたい。 matchは先頭からの一致をみる。searchは途中でも構わず一致をみるという違いがあるぽい。 matchで取れなくて焦った。
7.2. re — 正規表現操作 — Python 2.7.x ドキュメント
Pythonにおける文字コード
なんかPythonこんなに文字コード意識しないといけないとは知らなかった。。。
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position
などというエラーが。スタックトレースから、"".join
あたりでエラーが出ていること、
配列を使わないときはエラーが出ていないことなどから、配列周りが怪しい。
配列をstrに代入しようとしていたことが、原因ぽかった。もう少しわかりやすいエラー出してくれないかな。
画像を保存
image pipelineを使う
Downloading and processing files and images — Scrapy 1.0.4 documentation
exceptions.ImportError: No module named PIL
って怒られるから、
pip install PIL
You are using pip version 7.1.2, however version 8.0.2 is available. You should consider upgrading via the 'pip install --upgrade pip' command.
って怒られるから、
pip install --upgrade pip pip install PIL
Could not find a version that satisfies the requirement PIL (from versions: ) No matching distribution found for PIL
って怒られるから、
brew install pil >Instead of PIL, consider `pip install pillow` or `brew install Homebrew/python/pillow`. pip install pillow
image_urlsへの渡し方は リストかつUnicodeじゃダメっぽい。
image_urls = [img['src']]
画像名も変えられるぽいが面倒くさそうなのでやめておこう。
Python所感
文字コード周りが慣れないので難しい。 また、エラーコードからのデバッグがなかなか難しい。 重要な情報を吐いてくれない気がする。