Scrapy 分散クローラー、キュー、ブルーム フィルターを 1 分で入手

Scrapy 分散クローラー、キュー、ブルーム フィルターを 1 分で入手

[[348974]]

Scrapy を使用して分散クローラーを開発しますか?一番早い方法は何か知っていますか?分散クローラーを 1 分で開発または変更することは本当に可能ですか?

では、早速実践方法を見ていき、その後で詳細についてお話していきましょう。

すぐに始めましょう

ステップ0:

まず、Scrapy-Distributed をインストールします。

  1. pip で scrapy-distributed をインストールします

必要なランタイムがない場合は、テスト用に 2 つの Docker イメージ (RabbitMQ と RedisBloom) を起動できます。

  1. # RabbitMQ コンテナをプルして実行します。  
  2. docker run -d --name rabbitmq -p 0.0.0.0:15672:15672 -p 0.0.0.0:5672:5672 rabbitmq:3  
  3. # RedisBloom コンテナをプルして実行します。  
  4. docker run -d --name redis-redisbloom -p 0.0.0.0:6379:6379 redislabs/rebloom:latest

ステップ 1 (オプション):

既存のクローラーがある場合は、この手順をスキップして手順 2 に直接進むことができます。

クローラー プロジェクトを作成します。ここではサイトマップ クローラーを例に挙げます。

  1. scrapy startproject 簡単な例

次に、spiders フォルダー内のスパイダー プログラム ファイルを変更します。

  1. scrapy_distributed.spiders.sitemap から SitemapSpider をインポート 
  2. scrapy_distributed.queues.amqp から QueueConfig をインポートします 
  3. scrapy_distributed.dupefilters.redis_bloom から RedisBloomConfig をインポートします 
  4. クラス MySpider(SitemapSpider):  
  5. 名前= "例"    
  6. サイトマップのURL = ["http://www.people.com.cn/robots.txt"]  
  7. queue_conf:キュー構成キュー構成= キュー構成(  
  8. name = "example" durable = True arguments ={"x-queue-mode": "lazy", "x-max-priority": 255} です。  
  9.  
  10. redis_bloom_conf: RedisBloomConfig RedisBloomConfig = RedisBloomConfig(キー= "example:dupefilter" )  
  11. def parse(自己、レスポンス):
  12.   self.logger.info(f"レスポンスを解析、URL: {response.url}")

ステップ2:

設定ファイル settings.py の SCHEDULER、DUPEFILTER_CLASS を変更し、RabbitMQ と Redis の関連設定を追加するだけで、すぐに分散クローラーを取得できます。 Scrapy-Distributed は、デフォルトの RabbitMQ キューとデフォルトの RedisBloom フィルターを初期化するのに役立ちます。

  1. # RabbitMQとRedisBloomを統合したスケジューラ 
  2. # RabbitMQのスケジューラのみを使用する場合は、ここで scrapy_distributed.schedulers.amqp.RabbitScheduler を記入できます 
  3. スケジューラ= "scrapy_distributed.schedulers.DistributedScheduler"    
  4. SCHEDULER_QUEUE_CLASS = "scrapy_distributed.queues.amqp.RabbitQueue"    
  5. RABBITMQ_CONNECTION_PARAMETERS = "amqp://guest:guest@localhost:5672/example/?heartbeat=0"    
  6. DUPEFILTER_CLASS = "scrapy_distributed.dupefilters.redis_bloom.RedisBloomDupeFilter"    
  7. BLOOM_DUPEFILTER_REDIS_URL = "redis://:@localhost:6379/0"    
  8. BLOOM_DUPEFILTER_REDIS_HOST = "ローカルホスト"    
  9. BLOOM_DUPEFILTER_REDIS_PORT = 6379    
  10. # Redis Bloomクライアントの設定はコピーするだけ 
  11. REDIS_BLOOM_PARAMS = {  
  12. "redis_cls": "redisbloom.client.クライアント"  
  13. }  
  14. # ブルームフィルタの誤判定率の設定。設定が書かれていない場合、デフォルト値は 0.001 です。  
  15. BLOOM_DUPEFILTER_ERROR_RATE = 0.001  
  16. # ブルーム フィルターの容量構成。設定が書かれていない場合、デフォルト値は100_0000です。  
  17. ブルーム_デュプフィルター_容量= 100_0000  

また、Spider クラスに 2 つのクラス属性を追加して、RabbitMQ キューまたは RedisBloom フィルターを初期化することもできます。

  1. クラス MySpider(SitemapSpider):  
  2. ......  
  3. # 引数パラメータを通じてさらに多くのパラメータを設定できます。この例では、遅延モードと最大優先度を設定します 
  4. queue_conf:キュー構成キュー構成= キュー構成(  
  5. name = "example" durable = True arguments ={"x-queue-mode": "lazy", "x-max-priority": 255} です。  
  6.  
  7. # キー、エラーレート、容量を使用して、それぞれブルームフィルターの Redis キー、エラー率、容量を設定します。  
  8. redis_bloom_conf: RedisBloomConfig RedisBloomConfig = RedisBloomConfig(キー= "example:dupefilter" error_rate = 0 .001 、 capacity = 100_0000 )  
  9. ......

ステップ3:

  1. スクレイピークロールの例

RabbitMQ キューと RedisBloom フィルターを確認してください。正常に動作していますか?

ご覧のとおり、Scrapy-Distributed のサポートにより、構成ファイルを変更するだけで、通常のクローラーを RabbitMQ キューと RedisBloom フィルターをサポートする分散クローラーに変更できるようになります。 RabbitMQ と RedisBloom 環境では、構成の変更に 1 分しかかかりません。

Scrapy-Distributedについて

現在、Scrapy-Distributed は主に Scrapy-Redis と scrapy-rabbitmq の 2 つのライブラリを指します。

Scrapy の経験があれば、分散クロールを迅速に実行できる Scrapy-Redis ライブラリをご存知かもしれません。 RabbitMQ をクローラー タスク キューとして使用しようとしたことがある場合は、scrapy-rabbitmq プロジェクトをご覧になったことがあるかもしれません。 Scrapy-Redis はすでに非常に便利であり、scrapy-rabbitmq も RabbitMQ をタスク キューとして実装できることは事実ですが、いくつか欠陥があります。ここで簡単にいくつかの疑問を提起したいと思います。

  • Scrapy-Redis は Redis のセットを使用して重複を排除します。リンクの数が多くなるほど、占有するメモリも多くなります。多数のタスクを実行する分散クローラーには適していません。
  • Scrapy-Redis は Redis リストをキューとして使用します。多くのシナリオでは、タスクのバックログが発生し、メモリ リソースが急速に消費されることになります。たとえば、Web サイトのサイトマップをクロールする場合、リンクがキューに入る速度は、キューから出る速度よりもはるかに速くなります。
  • scrapy-rabbitmq などの RabbitMQ の Scrapy コンポーネントは、キューの作成時に RabbitMQ でサポートされるさまざまなパラメータを提供しず、キューの永続性などのパラメータを制御することはできません。
  • scrapy-rabbitmq などの rabbitmq フレームワークのスケジューラはまだ分散 dupefilter をサポートしていないため、ユーザーは関連するコンポーネントを自分で開発または接続する必要があります。
  • Scrapy-Redis や scrapy-rabbitmq などのフレームワークは侵入的です。これらのフレームワークを使用して分散クローラーを開発する必要がある場合は、独自のクローラー コードを変更し、フレームワークの Spider クラスを継承して分散機能を実現する必要があります。

そこで、この時に Scrapy-Distributed フレームワークが誕生しました。非侵入型設計により、settings.py の設定を変更するだけで、フレームワークはデフォルトの構成に従ってクローラーを配布できます。

Scrapy-Redis と scrapy-rabbitmq の問題点のいくつかを解決するために、Scrapy-Distributed は次のことを行います。

  • RedisBloom の Bloom フィルターが使用され、メモリの消費量が少なくなります。
  • RabbitMQ キューによって宣言されたすべてのパラメータ構成をサポートし、RabbitMQ キューが遅延モードをサポートしてメモリ使用量を削減できるようにします。
  • RabbitMQ のキュー宣言はより柔軟です。異なるクローラーは同じキュー構成を使用することも、異なるキュー構成を使用することもできます。
  • Scheduler の設計では、複数のコンポーネントの組み合わせがサポートされています。 RedisBloom の DupeFilter を単独で使用することも、RabbitMQ の Scheduler モジュールを単独で使用することもできます。
  • Scrapy 配布の非侵入型設計が実装されています。通常のクローラーは、設定を変更するだけで配布できます。

現在、フレームワークに多くの機能が追加されています。関心のある友人は、プロジェクト リポジトリの開発に引き続き注目し、一緒にアイデアについて話し合うことができます。

<<:  クラウドで生産性を向上させる方法

>>:  分散コンセンサスアルゴリズム EPaxos について 1 つの記事で学ぶ

推薦する

RamNode - 38% オフ/シアトル/アトランタ オンライン

LEBで2位にランクされたRamnodeは、安定したサーバー+高性能+Gポートを備えています。後に純...

清華紫光集団の「チップからクラウドへ」戦略は「デジタル中国」に中核技術サポートを提供する

2018年4月22日 - 福建省福州市の福州海峡国際会議展示センターで第1回デジタル中国建設成果サミ...

#NewYearFlashSale# pacificrack: VPS は年間 6.66 ドル (¥43) から、米国西部で最も安い KVM シリーズ VPS

Quadranet の直営ブランド「Pacificrack」(通称「PR VPS」) では、「新年フ...

SEOサイクルを正確に見積もる方法

単純にSEO受注の観点から言えば、SEOサイクルを正確に見積もるのはかなり面倒な作業です。現在有名な...

5年間磨き上げてきたKingsoft Cloudの分散データベースDragonBaseは金融業界に信頼性の高いサービスを提供

近年、金融サービスの急速な発展に伴い、膨大なデータに基づく高同時実行リアルタイムトランザクションには...

Toutiao が義烏に進出、数十万人のビジネスオーナーがインターネットマーケティングを習得できるように支援

月給5,000~50,000のこれらのプロジェクトはあなたの将来です義烏は古くから中国の「小商品都」...

ionswitch-3.5USD/VPS/シアトル/KVM/1GB RAM/10GB SSD/1TB トラフィック

新規参入の ionswitch, LLC はシアトル データ センター (BGP、AS395970)...

クラウドコンピューティングがチップ設計にもたらす革命

チップ設計における目標は、物事をより速く、より良くすることです。今では、クラウドが加わったことで、状...

vmbox - $20/年/2IP/1g メモリ/50g ハードディスク/2T トラフィック/ロサンゼルス

3 つのデータ センター: SingleHop のアムステルダムとフェニックス、Quadranet ...

検索結果にコンテンツ ページではなくホームページが表示されるのはなぜですか?

検索について言えば、ロングテールワードが多くのサイトにとって常にトラフィックの主なソースであったこと...

ウェブサイトのキーワードの安定したランキングを維持した経験

最近、何人かの友人がフォーラムでランキングを上げる問題について議論しています。実際、盲目的に上昇を追...

SaaS資産の40%がデータ侵害のリスクにさらされている

DoControl が最近発表したレポートによると、今日の企業では管理されていないデータが大量に存在...

オンラインストアを開設する際に知っておくべき、購入者の新しい消費者心理

近年、電子商取引は急速に発展し、多くの人がタオバオのオンラインショッピングの世界に参加しています。今...

OVHはどうですか?米国西海岸のヒルズボロデータセンターレビュー

OVHはどうですか? OVH米国西海岸はどうですか? OVH のヒルズボロ データ センターはどうで...

Kubernetesに永続ストレージを追加する際の課題

Kubernetes の採用は爆発的に増加していますが、宣伝されているにもかかわらず、Kuberne...