Help us understand the problem. What is going on with this article?

【ふくだ学習録】アプリ制作part6【33日目】

ふくだ学習録とは?

ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。

読了した本

データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearning
PHPフレームワーク CakePHP 3入門
SQLアンチパターン
Docker入門

今読んでいる本

なし

アプリ制作

テーブル設計

終了。
userに紐付くテーブル設計は、アプリ有料化(というか無料ユーザーと有料ユーザーの機能差の作成)をしていく時でいいかなと思ったので、一旦放置。

スクレイピングサーバーの作成

今回はscrapyを選択。scrapyを選択した理由は、下記。

  • pythonほぼ触ったことないから触ってみたい。
  • tensflowの時にpython触るだろうから、先に触れておきたい。
  • BeautifulSoupはライブラリで、scrapyはフレームワークなので、scrapyに慣れておいたほうが、今後スクレイピングする際に応用ききそう。(語彙力の無さ)

ざっくりしたscrapy概要は下記。
10分で理解する Scrapy

scrapyをdocker上で構築

まずはpython3の公式イメージを使用したりして。dockerfile書いていく。
参考にしたのは下記記事。

Python, scrapy でお祭りスクレイピング

実際に用意するファイルは下記の2つ。Dockerfileとpip_requirements.txt。

pip_requirements.txt
# Production
# =============================================================================
scrapy==1.8.0


# Development
# =============================================================================
flake8==3.3.0 # Pythonの文法チェックツール
flake8-mypy==17.3.3 
mypy==0.511 #pythonの型チェックツール
Dockerfile
# 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-devlibffi-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できるようにした。(このパターンたどり着くまでに結構時間食ってしまった。。)

docker-compose.yml
version: '2'
services:
  scrapy:
    tty: true # このオプションが必要

scrapy設定

このサイトと、公式ドキュメントを参考にして実装していっている。

10分で理解する Scrapy

今日の一言

参考にしていたサイトのスクレイピングはできたが、実際にスクレイピングしたいサイトの情報が取得できなかった。

現時点では推測だが、
①設定が間違っている(自分の記載間違い)
②そもそもサイト側でスクレイピング(クローリング)を拒否する対策をしている。(具体的な手法は分からないが)
上記のどちらかで取得できていない。

①の設定間違い(単純なtypo)の可能性もあるけど、なんとなく②な気がしているので、明日はスクレイピング対策などについてちょっと調べてみる。(ここが突破できなければ、アプリ構想がおじゃんなので乗り越えたい。)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした