scrapy-redisを使って、redisを使ったクローリングを試してみる その3(パラメーターを利用してのクローリング:use parameter) - 株式会社CoLabMix

scrapy-redisを使って、redisを使ったクローリングを試してみる その3(パラメーターを利用してのクローリング:use parameter)

scrapy-redisを使ってのクローリングです。

前回までで基本的な利用の仕方を記載して行きました。

★scrapy-redisを使って、redisを使ったクローリングを試してみる その1(基本的な設定)
https://colabmix.co.jp/tech-blog/scrapy-redis/

★scrapy-redisを使って、redisを使ったクローリングを試してみる その2
https://colabmix.co.jp/tech-blog/scrapy-redis-2/

 

ただ、実際に細かなクローリングを行なっていくと、パラメーターが「start_urls」だけだとデータの取得がうまくいかないケースがあります。

データをPOSTで送付したい時や、パラメーターを結果にも欲しい時、そもそもJavaScriptを利用してのリクエストなど厳しいものがあります。

今回は引数としてのパラメーター(parameter)を利用してのscrapy-redisの使い方です。

尚、scrapy-redisの設定に「REDIS_PARAMS」という項目がありますが、こちらはRedisに接続するためのパラメーターです。

 

前回と同じように構成としては以下です。

ServerA : redisサーバ
ServerB : scrapy-redis

 

データを送る側の設定(ServerA)

キューを出す側として以下のプログラムを使用してみます。

こちらでredisに必要なデータをjson.dumpして送っています。

尚、scrapy-redisでのキーは「[spider名」:start_urls」となります。

 

scrapy-redis側の設定

さて、クローリングする側の設定です。

まず、パラメーターとして設定した「param1: test_param」を結果ファイルにも出すためにitemsの編集を行います。

 

次にspiderの設定です。

少し複雑になっていますが、scrapy-redisの「make_request_from_data」というデータを受け取りリクエストを作成する関数を書き換えています。

・Githubソース
https://github.com/rmax/scrapy-redis/blob/master/src/scrapy_redis/spiders.py

受け取ったキューの値をdictに戻し、リクエストの生成などを行っています。

 

ここで、ポイントになるのが「bytes_to_str」という関数です。

scrapy-redisの中で使用しているので、こちらのファイル(utils.py)を作成する必要があります。

 

こちらで完了です。

 

起動と試験

以下のコマンドで起動が行われます。

 

ServerAの方で「push.py」を実行すると以下の表示が行われます。

無事、結果の方にもキューで設定したパラメーターがセットされています。

リクエストのカスタマイズができるので複雑なリクエストなどにも応用できます。

★関連記事
scrapy-redisを使って、redisを使ったクローリングを試してみる その1(基本的な設定)
scrapy-redisを使って、redisを使ったクローリングを試してみる その2

 

このブログは株式会社CoLabMixによる技術ブログです。

GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。

Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。

開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。

お問い合わせやご依頼・ご相談など

    関連記事

    1. Railsアプリの CentOS7 + nginx 環境を 無料 の …

    2. Elasticsearch 6 を使ったデータ検証 その1(Docke…

    3. CentOS7系でmongodb4.0のインストール

    4. python3でGoogleDriveからファイルの取得

    5. terraformでAmazon VPC エントポイント(endpoi…

    6. 「outlook.jp」や「hotmail.co.jp」宛のメールがエ…