Scrapy は、クローラー プログラムを迅速かつ柔軟に作成できる効率的な Python Web クローラー フレームワークです。ただし、大量のデータや複雑な Web サイトを処理する場合、スタンドアロン クローラーではパフォーマンスとスケーラビリティの問題が発生する可能性があるため、データ クロールの効率を向上させるために分散型クローラーを使用する必要があります。この記事では、Scrapy の分散クローラーと、データ クローリングの効率を向上させる方法を紹介します。
1. 分散型クローラーとは何ですか?
従来のスタンドアロン クローラー アーキテクチャでは、すべてのクローラーが同じマシン上で実行されるため、大量のデータや高圧のクロール タスクに直面すると、マシンのパフォーマンスが低下することがよくあります。分散クローラは、クローラのタスクを複数のマシンに分散して処理します。分散コンピューティングとストレージにより、単一マシンの負荷が軽減され、それによってクローラの効率と安定性が向上します。
Scrapy の分散クローラーは、通常、オープンソースの分散スケジューリング フレームワーク Distributed Scrapy (略して DSC) を使用して実装されます。 DSC は、Scrapy クローラー プログラムを複数のマシンに分散して並列処理し、結果を中央のスケジューリング ノードに均一に要約します。
2. 分散クローラーを実装するにはどうすればよいですか?
1. 分散 Scrapy をインストールします
次のコマンドを実行して DSC をインストールします:
pip installscrapy_redis
pip install pymongo
2 Scrapy 構成ファイルを変更する
Scrapy プロジェクトの settings.py ファイルに次の構成を追加します:
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER_PERSIST=True
REDIS_HOST='localhost'
REDIS_PORT=6379
3. クローラー コードを記述します
Scrapy クローラー プログラムでは、開始リクエスト メソッドを変更する必要があります。scrapy-redis の開始メソッドを使用します:
importscrapy,re,json
from ..items import DouyuItem
fromcrapy_redis.spiders import RedisSpider
class DouyuSpider(RedisSpider):
# 爬虫名字 name = 'douyu' # redis-key,从redis中pop数据进行爬取 redis_key = 'douyu:start_urls' def parse(self, response): # scrapy爬虫代码
4. Redis サービスを開始します
#ターミナルで次のコマンドを実行して、redis サービスを開始します:redis-server5. Start Distributed Scrapyターミナルで次のコマンドを入力して、redis サービスを開始しますDSC ノード: scrapy roll douyu -s JOBDIR= job1このうち、job1 はカスタム名にすることができ、DSC がクローラーのステータスを記録するために使用します。 3. Scrapy クローラーの最適化Scrapy には、クローラーの効率を最適化するためのさまざまな方法が用意されており、分散型クローラーと併用すると、データ クローリングの効率をさらに向上させることができます。 1. CrawlerRunner の使用CrawlerRunner では、アプリケーションを拡張するために Twisted クラスが必要です。単に Python ファイルを実行する場合と比較して、複数のプロセスや複数のマシンを使用せずに、同じプロセス内で複数のクローラを同時に実行できます。これにより、タスク管理が容易になります。 CrawlerRunner の使用方法は次のとおりです。 fromTwisted.internet importactor,deferfromscrapy.crawler import CrawlerRunner
fromscrapy.utils.project import get_project_settings
from my_spider.spiders.my_spider import MySpider
def roll():
yield runner.crawl(MySpider) reactor.stop()
reactor.run()
DOWNLOAD_DELAY = 0.5
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.MyCustomDownloaderMiddleware': 543,
}
以上がScrapy の分散クローラーとデータ クローリング効率を向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。