scrapy-redis分布型爬虫類の構築過程(理論編)
1.背景
Scripyは汎用的な爬虫枠ですが、分散はサポートされていません。Scripy-redisはScrrapy分散型の這い取りをより便利に実現するために、redisをベースとしたいくつかのコンポーネントを提供しています。
2.環境システム:win 7 scrapy-redis redis 3.05 python 3.6.1
3.原理
3.1.scrapyとSrapy-redisのアーキテクチャ図を比較してください。
scrapyアーキテクチャ図:
scrapy-redisアーキテクチャ図:
一つのredisコンポーネントが多くなりました。主に二つのところに影響します。一つ目はスケジューラです。二つ目はデータの処理です。3.2.Srapy-redis分散戦略。
分散型爬虫類としては、マスター端末(コアサーバ)が必要です。マスターの端に、Redisデータベースを構築して、start_を保存します。urls、request、items。マスターの役割は、url指紋の判定、Requestの割り当て、およびデータの記憶を担当する(一般的にマスターの端には、mongodbをインストールして、redisの中のitemsを記憶する)。マスター以外にも、slaaver(爬虫類プログラムの実行端)というキャラクターがいます。主に爬虫類プログラムを実行してデータを取得し、登山中に新しいRequestをMasterのredisデータベースに提出します。
上の図のように、私達は4台のコンピュータがあると仮定します。A、B、C、Dのいずれかのコンピュータがマスターの端末またはスラバーの端末として使えます。全体の流れは:まずSlaver端はMasterからタスクを持ってデータをキャプチャし、Slaverはデータを取り込むと同時に、新たなタスクを生み出すRequestはMasterに提出します。 Masterの端にはRedisデータベースが一つしかありません。未処理のRequestを重いものにして、任務を割り当てて、処理後のRequestを行列に参加して、這って取るデータを保存します。
Scripy-redisはデフォルトで使っています。このポリシーは簡単に実現できます。タスクスケジュールなどの作業がもうできました。私たちはRedis Spider、指定redis_を引き継ぎます。keyでいいです。
欠点は、Scripy-redisスケジューリングのタスクは、Requestオブジェクトであり、情報量が大きい(urlだけでなく、calback関数、headersなどの情報も含む)ため、爬虫速度を低下させたり、Redisの多くの格納空間を占有したりする可能性がありますので、効率を保証するためには、ある程度のハードウェアレベルが必要です。
4.運行フロー
第一歩:slaaver端の爬虫類の中で、redis gauを指定します。keyは、redisデータベースのアドレスを指定します。例えば、
ステップ4:slaaver端の爬虫類はデータを登り始めます。ログは以下の通りです
この部分のコードは、scrapy-redis分布爬虫類の構築過程(コード編)を参照してください。
5.環境設置及びコード作成
5.1.scrapy-redis環境インストール
コードの位置:後でカスタマイズができます。
5.2.scrapy-redis分布型爬虫類の編纂
第一歩は、公式サイトの例示的なコードをダウンロードする。アドレス:https://github.com/rmax/scrapy-redis(gitをインストールする必要がある)
公式サイトでは、Spider+redisとCrawlSpider+redisをそれぞれ引き継ぐ2つの例示的なコードを提供しています。
第二のステップは、公式サイトが提供する例示的なコードに従って修正される。
ここで、scrapy-redisの分布型爬虫類の構築過程(理論編)についての記事を紹介します。もっと関連したscrapy redisの分布型爬虫類の構築内容は以前の文章を検索してください。または次の関連記事を引き続きご覧ください。これからもよろしくお願いします。
Scripyは汎用的な爬虫枠ですが、分散はサポートされていません。Scripy-redisはScrrapy分散型の這い取りをより便利に実現するために、redisをベースとしたいくつかのコンポーネントを提供しています。
2.環境
3.1.scrapyとSrapy-redisのアーキテクチャ図を比較してください。
scrapyアーキテクチャ図:
scrapy-redisアーキテクチャ図:
一つのredisコンポーネントが多くなりました。主に二つのところに影響します。一つ目はスケジューラです。二つ目はデータの処理です。3.2.Srapy-redis分散戦略。
分散型爬虫類としては、マスター端末(コアサーバ)が必要です。マスターの端に、Redisデータベースを構築して、start_を保存します。urls、request、items。マスターの役割は、url指紋の判定、Requestの割り当て、およびデータの記憶を担当する(一般的にマスターの端には、mongodbをインストールして、redisの中のitemsを記憶する)。マスター以外にも、slaaver(爬虫類プログラムの実行端)というキャラクターがいます。主に爬虫類プログラムを実行してデータを取得し、登山中に新しいRequestをMasterのredisデータベースに提出します。
上の図のように、私達は4台のコンピュータがあると仮定します。A、B、C、Dのいずれかのコンピュータがマスターの端末またはスラバーの端末として使えます。全体の流れは:
Scripy-redisはデフォルトで使っています。このポリシーは簡単に実現できます。タスクスケジュールなどの作業がもうできました。私たちはRedis Spider、指定redis_を引き継ぎます。keyでいいです。
欠点は、Scripy-redisスケジューリングのタスクは、Requestオブジェクトであり、情報量が大きい(urlだけでなく、calback関数、headersなどの情報も含む)ため、爬虫速度を低下させたり、Redisの多くの格納空間を占有したりする可能性がありますので、効率を保証するためには、ある程度のハードウェアレベルが必要です。
4.運行フロー
第一歩:slaaver端の爬虫類の中で、redis gauを指定します。keyは、redisデータベースのアドレスを指定します。例えば、
class MySpider(RedisSpider):
"""Spider that reads urls from redis queue (myspider:start_urls)."""
name = 'amazon'
redis_key = 'amazonCategory:start_
# redis
'REDIS_HOST': '172.16.1.99',
'REDIS_PORT': 6379,
ステップ2:slaaver側の爬虫類を起動し、爬虫類は待機状態に入り、redis中にredis_が出現するのを待つ。key,Logは以下の通りである
2017-12-12 15:54:18 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-12-12 15:54:18 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-12-12 15:54:18 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.logstats.LogStats']
2017-12-12 15:54:18 [myspider_redis] INFO: Reading start URLs from redis key 'myspider:start_urls' (batch size: 110, encoding: utf-8
2017-12-12 15:54:18 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'redisClawerSlaver.middlewares.ProxiesMiddleware',
'redisClawerSlaver.middlewares.HeadersMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2017-12-12 15:54:18 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2017-12-12 15:54:18 [scrapy.middleware] INFO: Enabled item pipelines:
['redisClawerSlaver.pipelines.ExamplePipeline',
'scrapy_redis.pipelines.RedisPipeline']
2017-12-12 15:54:18 [scrapy.core.engine] INFO: Spider opened
2017-12-12 15:54:18 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-12-12 15:55:18 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2017-12-12 15:56:18 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
ステップ3:スクリプトを起動し、redisデータベースにredis_を記入します。key(start_)urls
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
# start_url redis redis_key ,
redis_Host = "172.16.1.99"
redis_key = 'amazonCategory:start_urls'
# redis
rediscli = redis.Redis(host = redis_Host, port = 6379, db = "0")
# redis requests
flushdbRes = rediscli.flushdb()
print(f"flushdbRes = {flushdbRes}")
rediscli.lpush(redis_key, https://www.baidu.com)
ステップ4:slaaver端の爬虫類はデータを登り始めます。ログは以下の通りです
2017-12-12 15:56:18 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
parse url = https://www.baidu.com, status = 200, meta = {'download_timeout': 25.0, 'proxy': 'http://proxy.abuyun.com:9020', 'download_slot': 'www.baidu.com', 'download_latency': 0.2569999694824219, 'depth': 7}
parse url = https://www.baidu.com, status = 200, meta = {'download_timeout': 25.0, 'proxy': 'http://proxy.abuyun.com:9020', 'download_slot': 'www.baidu.com', 'download_latency': 0.8840000629425049, 'depth': 8}
2017-12-12 15:57:18 [scrapy.extensions.logstats] INFO: Crawled 2 pages (at 2 pages/min), scraped 1 items (at 1 items/min)
ステップ5:スクリプトを起動し、redisのitemsをmongodbに保存します。この部分のコードは、scrapy-redis分布爬虫類の構築過程(コード編)を参照してください。
5.環境設置及びコード作成
5.1.scrapy-redis環境インストール
pip install scrapy-redis
コードの位置:後でカスタマイズができます。
5.2.scrapy-redis分布型爬虫類の編纂
第一歩は、公式サイトの例示的なコードをダウンロードする。アドレス:https://github.com/rmax/scrapy-redis(gitをインストールする必要がある)
git clone https://github.com/rmax/scrapy-redis.git
公式サイトでは、Spider+redisとCrawlSpider+redisをそれぞれ引き継ぐ2つの例示的なコードを提供しています。
第二のステップは、公式サイトが提供する例示的なコードに従って修正される。
ここで、scrapy-redisの分布型爬虫類の構築過程(理論編)についての記事を紹介します。もっと関連したscrapy redisの分布型爬虫類の構築内容は以前の文章を検索してください。または次の関連記事を引き続きご覧ください。これからもよろしくお願いします。