技術メモ

Scala,React Nativaなどの技術メモ

スクレイピングで画像収集

目的

GoogleTensorFlowや、Cloud Vision APIを公開してるみたい。これらを使って、画像中から(できればリアルタイムで)物体検出をしてみたい。そのための学習用の画像を集める。

技術選定

スクレイピング系だとPythonの情報が多い。自分もそんなイメージあったけど、なんで?そういうライブラリ充実してんのかな。

qiita.com

この辺りを参考にしていく。

環境構築

qiita.com

pipはピップと読むらしい。この辺を参考にしてみるか。

blog.amedama.jp

後方互換性ないのか。Python2を使う理由は今のところない。

zipimport.ZipImportError: can't decompress data; zlib not available

xcode-select --installで回避。

クローリングとスクレイピング

http://momijiame.tumblr.com/post/114227737756/python-beautifulsoup4-を使って-web-サイトをスクレイピングする
momijiame.tumblr.com

どうやら二つの意味は違うみたい。ウェブスクレイピングは厳密には各ページを順番に辿っていくクローリングとページから情報を抽出するスクレイピングの二つのパートに分かれている。 まあ、通りでPython スクレイピングだと、ページ送りに関する情報が出てこないなと思った。

http://momijiame.tumblr.com/post/114579225706/python-scrapy-と-beautifulsoup4-を使った快適-web-スクレイピング
momijiame.tumblr.com

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所感

文字コード周りが慣れないので難しい。 また、エラーコードからのデバッグがなかなか難しい。 重要な情報を吐いてくれない気がする。