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

推薦する

ウェブサイトへの関心を維持する10の方法

最近、Weibo を使っています。一番嬉しいのは、ファンの数が増えることです。一番嫌なのは、フォロワ...

Linux 仮想化 KVM-Qemu Virtio デバイスの分析

[[381734]]この記事はWeChatの公開アカウント「LoyenWang」から転載したもので...

解読:ホームページだけが収録・公開される理由とサンドボックス効果

サンドボックス効果: 新しい Web サイトが構築され、検索エンジンに送信されると、検索エンジンはス...

Baidu Green Radish アルゴリズムのアップデート: 医療マーケティングの打開策

私は医療ネットワークマーケティングに従事しています。最近、Baidu の頻繁な行動により、多くのサイ...

hosthatch-香港 VPS/softlayer/月額 2.6 ドル/256m メモリ/30g SSD/1T トラフィック

私たちがまだ hostUS の特別な香港 VPS を応援している間に、hosthatch はひっそり...

最近百度が目撃した奇妙な現象のいくつかを詳しく見てみる

過去には、2012 年は世界の終わりだとよく言われていましたが、SEO の世界では、2012 年は多...

落ち着いてSEO最適化におけるソフト記事を再認識しよう

ソフト記事は、初心者のウェブマスターであっても、SEO の豊富な経験を持つマスターであっても、その言...

Photonvps がトラフィックを月間 33T にアップグレード

photonvpsのトラフィックが33Tにアップグレードされたというニュースを見ました(XENベース...

ナユキズティーは上場を待ちきれない

現在、ミルクティーは若者にとって通常の消費財の一つとなり、彼らの特定の社会的ニーズを運び、オフィスで...

国家著作権局:著作権侵害や海賊版などの違法ウェブサイトを報告すると、最大1万元の報奨金が支給される

国家著作権局と他の4つの部門は、オンライン上の著作権侵害や海賊版と戦うために、2012年に4か月間の...

Dynamics 365の中国上陸で発表された情報の徹底分析

[51CTO.comよりオリジナル記事] 中国市場で唯一の国際パブリッククラウドを展開する21Via...

w3space-$7.5/Windows/512m メモリ/10g ハードディスク/750g トラフィック

w3space は 2009 年に設立された小規模な VPS プロバイダーです。主に openvz ...

ウェブサイトのインタラクティブ性を高めてコンバージョン率を向上させる方法についての簡単な分析

今日の情報化時代において、オンライン マーケティングは目新しいものではありません。多くの伝統的な企業...

ブラック 5 プロモーション: a2hosting-50% オフ/SSD/無制限のスペース/SS サポート

A2hosting、ブラックフライデーがやって来ました! SSD ハード ドライブを搭載した仮想ホス...

5つのポイントを押さえればSEO最適化はもう問題なし

草の根のウェブマスターや中小企業のサイト運営者にとって、検索エンジンから正確なターゲットトラフィック...