ふくだ学習録とは?
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。
読了した本
データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearning
PHPフレームワーク CakePHP 3入門
SQLアンチパターン
Docker入門
今読んでいる本
なし
アプリ制作
テーブル設計
終了。
userに紐付くテーブル設計は、アプリ有料化(というか無料ユーザーと有料ユーザーの機能差の作成)をしていく時でいいかなと思ったので、一旦放置。
スクレイピングサーバーの作成
今回はscrapyを選択。scrapyを選択した理由は、下記。
- pythonほぼ触ったことないから触ってみたい。
- tensflowの時にpython触るだろうから、先に触れておきたい。
- BeautifulSoupはライブラリで、scrapyはフレームワークなので、scrapyに慣れておいたほうが、今後スクレイピングする際に応用ききそう。(語彙力の無さ)
ざっくりしたscrapy概要は下記。
10分で理解する Scrapy
scrapyをdocker上で構築
まずはpython3の公式イメージを使用したりして。dockerfile書いていく。
参考にしたのは下記記事。
実際に用意するファイルは下記の2つ。Dockerfileとpip_requirements.txt。
# Production
# =============================================================================
scrapy==1.8.0
# Development
# =============================================================================
flake8==3.3.0 # Pythonの文法チェックツール
flake8-mypy==17.3.3
mypy==0.511 #pythonの型チェックツール
# Linuxはalpineを使用する。理由は軽いから、
FROM python:3.6-alpine
RUN apk add --update --no-cache \ # apkはAPK(アルパインのパッケージ管理ソフト)のコマンド
build-base \
python-dev \
zlib-dev \
libxml2-dev \
libxslt-dev \
openssl-dev \
libffi-dev
# ADDコマンドでpip_requirements.txtファイルをコンテナにADD
ADD pip_requirements.txt /tmp/pip_requirements.txt
# ライブラリをインストール
RUN pip install -r /tmp/pip_requirements.txt
# appディレクトリ配下へ移動
ADD ./app /usr/src/app
WORKDIR /usr/src/app
※python-dev
〜libffi-dev
まではalpine使用している関係で、ライブラリが足りてなくて足している(っぽい)
下記記事ではUbuntuで構築しているパターンだが、Ubuntuでも数個ライブラリが足りていないっぽい。(alpineならもっと足りてなくてもまぁ違和感はない。)
【Python】スクレイピング用フレームワークScrapyの練習環境をDockerで構築する【Docker】
Alpine Linux で Docker イメージを劇的に小さくする
docker-composeで起動したコンテナを起動状態のままにする方法。
今回scrapyアプリケーションを作成するために、コンテナに入りscrapy startproject scraping .
といったコマンドを入力する必要がありました。
参考にした記事(Python, scrapy でお祭りスクレイピング)ではdocker run
でコンテナを起動状態にして、docker exec
してコマンド入力していたが、docker-composeでやると、コンテナが止まってしまい、コマンド入力できなかった。
他にも解決方法はあったかもしれないが、今回はdocker-compose.ymlに下記のオプションを記載することで、コンテナの起動状態保ち、docker exec
できるようにした。(このパターンたどり着くまでに結構時間食ってしまった。。)
version: '2'
services:
scrapy:
tty: true # このオプションが必要
scrapy設定
このサイトと、公式ドキュメントを参考にして実装していっている。
今日の一言
参考にしていたサイトのスクレイピングはできたが、実際にスクレイピングしたいサイトの情報が取得できなかった。
現時点では推測だが、
①設定が間違っている(自分の記載間違い)
②そもそもサイト側でスクレイピング(クローリング)を拒否する対策をしている。(具体的な手法は分からないが)
上記のどちらかで取得できていない。
①の設定間違い(単純なtypo)の可能性もあるけど、なんとなく②な気がしているので、明日はスクレイピング対策などについてちょっと調べてみる。(ここが突破できなければ、アプリ構想がおじゃんなので乗り越えたい。)