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

Scrapy Cloudでスクレイピングした成果物をS3にアップロードする

More than 3 years have passed since last update.

はじめに

以前、勉強目的で、AWS lambda + API Gateway で郵便番号検索APIを作ってみたのですが、その郵便番号データはScrapyでスクレイピングし、S3にアップロードして利用していました。
今回は、そのプロジェクトをScrapy Cloudにデプロイして定期スケジュール実行するまでにハマったポイントについて書きます。

Scrapy Cloudについては、下記のURLを参考にしました。

全体のワークフロー

全体のワークフローを図にすると下記のようになります。

jp-zip_scrapy構成図.png

scrapinghubにデプロイするまで

scrapyのプロジェクトを作成してから、scrapinghubにデプロイするまでは、下記のような流れになります。

  • scrapyプロジェクトを作成
    • $ scrapy startproject {your project}
  • ローカルで実装
  • ローカルでスクレイピングしてみる
    • $ scrapy runspider {spider_file.py}
  • scrapinghubにデプロイ
    • $ shub deploy

scrapinghubでジョブを実行したときにハマったこと

scrapinghubにデプロイするまでは、順調だったのですが、scrapinghubでジョブを実行したときにいくつかハマったポイントがありました。

botoは2系をサポート

AWSの操作には、botoを使いますが、Scrapy Cloudであらかじめインストールされているのはboto(v2)なので、注意が必要です。

boto3を追加インストール(2016-12-19更新)

scrapinghub.ymlrequirements_fileを指定すれば、必要なライブラリをインストールできるので、boto3を利用することができます。

デプロイ時にrequirements_fileが正常に処理されれば、Code & Deploysrequirementsにて、追加インストールされたライブラリを確認することができます。

requirements.png

AWSの認証情報をどうするか

AWS認証情報は、Spider Settings -> Spider settigns にて、下記のように設定値を登録します。

scrapy_settings.png

コードからは下記のようにアクセスします。

from scrapy.conf import settings

s3 = boto.connect_s3(settings['AWS_ACCESS_KEY_ID'], settings['AWS_SECRET_ACCESS_KEY'])

ローカルで確認する場合は、settings.pyに、設定値を記述します。
ただし、~/.aws/credentialsに認証情報が存在する場合は、設定値の記述は不要です。

settings.py
AWS_ACCESS_KEY_ID = 'xxxxxx'
AWS_SECRET_ACCESS_KEY = 'xxxxxx'

課題

  • S3へのファイルアップロードが極端に遅く、スクレイピングに約20分かかっている
    • 勉強目的なので、気にしなくてもいいのだが、何とか改善したい
  • 郵便番号データは毎月1度は更新されている
  • 郵便番号データが更新された場合に、AWS Lambda側のAPIも自動的に最新のデータを参照するようにしたい
    • 現状、郵便番号データの更新年月日をバージョン情報として、ステージ変数で管理している
    • S3へのアップロードが完了した後で、ステージ変数を更新したい

おわりに

はじめは、APIだけでなく、ScrapyプロジェクトもAWS Lambdaで動かそうとしていました。
しかし、ソースコードをライブラリも込みでZIPファイルに圧縮してアップロードしなくてはならず、結果として、うまく動かせなかったので、素直にScrapy Cloudにデプロイしてみました。

ボット・クローラー Advent Calendar 2016にも招待されましたので、そちらでも、Scrapy Cloudを使って何かボットを作って記事にしようと思います。

ではでは。

photocreate
ITの力で、写真を通じて感動があふれかえる社会を実現する「フォトライフ構想」を目指すWebサービスを展開しています
https://www.photocreate.co.jp/
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
ユーザーは見つかりませんでした