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 つの記事で学ぶ

推薦する

SEO業界が推進する高速ランキングは違法な方法かもしれない

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますSEO 高...

多くのウェブサイトがインデックスされることは良いことか悪いことか?新たな洞察

百度はここ2日間でアップデートされ、多くのウェブサイトに含まれる外部リンクの数が急増しました。多くの...

企業はクラウドコンピューティングの支出に100億ドル以上を無駄にする:その理由

エンタープライズクラウド管理会社RightScale Inc.の新しい予測によると、企業は2018年...

/boot が不十分ですW: mdadm: /etc/mdadm/mdadm.conf にアレイが定義されていません。

システムを更新するときに、W: mdadm: /etc/mdadm/mdadm.conf にアレイが...

WEB2.0ボタンツール:Baiduの共有

Baidu Share は、Baidu が Web ページのアドレスを収集して共有するために提供して...

「万家ショッピング」は中国最大のオンラインねずみ講事件

杭州、8月7日(王毅記者)今朝、金華市婺城区裁判所は、国内最大のオンラインねずみ講事件「万家ショッピ...

7 クラウド コンピューティング データ ウェアハウス

最高のクラウド データ ウェアハウスは、多くの企業がクラウド コンピューティングを導入し、物理的なデ...

クラウドネイティブアプリケーションを保護する方法

クラウド コンピューティングは、展開の流動性と自動化の向上という点で、非常に大きな機能をもたらします...

Yitao Search の責任者 Guijiaoqi: パーソナライズされた検索の影響を受けるのは誰ですか?

パーソナライズされた検索は、見た目は美しいものの、実装が難しいフレーズです。ここでは、小さくて美しい...

消費者連合がお金を稼ぐ方法と関連する質問への回答を共有

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています消費者連盟...

Database as a Service (DBaaS) を使用する必要がありますか?

クラウド コンピューティングの急速な発展に伴い、トップレベルのフレームワークから始めて、全体的なデー...

KubeSphereはForresterレポートで選ばれ、「フルスタックコンテナプラットフォーム」として評価されました

Forrester Researchは最近、「Now Tech: 中国のエンタープライズ コンテナ ...

A5サイズのソフト記事がウェブマスターにいくつかの考えを与える

今日、ある著者が A5 でソフト記事を書いた経験を共有しているのを見ました。その記事は非常に興味深く...

MetWebsite Builderをインストールするにはどうすればいいですか?

月収10万元の起業の夢を実現するミニプログラム起業支援プランMetO ウェブサイト構築システムは、ハ...