目次
Redis スケジューラを使用する
Redis 重複排除戦略を使用する
Redis レコードをクリアしない場合は、クロールを一時停止/再開できます
redis の接続パラメータを設定します
encoding:utf-8
ホームページ バックエンド開発 Python チュートリアル Scrapy の分散クローラーとデータ クローリング効率を向上させる方法

Scrapy の分散クローラーとデータ クローリング効率を向上させる方法

Jun 22, 2023 pm 09:25 PM
scrapy 分散型クローラー データ収集の効率

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 ファイルに次の構成を追加します:

Redis スケジューラを使用する

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

Redis 重複排除戦略を使用する

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

Redis レコードをクリアしない場合は、クロールを一時停止/再開できます

SCHEDULER_PERSIST=True

redis の接続パラメータを設定します

REDIS_HOST='localhost'
REDIS_PORT=6379

3. クローラー コードを記述します

Scrapy クローラー プログラムでは、開始リクエスト メソッドを変更する必要があります。scrapy-redis の開始メソッドを使用します:

encoding:utf-8

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-server

5. 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,defer

fromscrapy.crawler import CrawlerRunner
fromscrapy.utils.project import get_project_settings
from my_spider.spiders.my_spider import MySpider

runner = CrawlerRunner(get_project_settings())

@defer.inlineCallbacks

def roll():

yield runner.crawl(MySpider)
reactor.stop()
ログイン後にコピー
crawl ()

reactor.run()

2. ダウンロード ミドルウェアの優先度を下げる

ダウンロード ミドルウェアで大量または複雑なデータを処理する必要がある場合は、次のようにします。 CONCURRENT_REQUESTS_PER_DOMAIN を使用して、ダウンロード ミドルウェアの優先度を下げます。優先度:

CONCURRENT_REQUESTS_PER_DOMAIN = 2

DOWNLOAD_DELAY = 0.5
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.MyCustomDownloaderMiddleware': 543,
}

3. 調整 CONCURRENT_REQUESTS および DOWNLOAD_DELAY パラメータ

CONCURRENT_REQUESTS は、各ドメイン名が同時に処理できるリクエストの最大数を示し、マシンの構成とタスクの要件に応じて合理的に調整できます。

DOWNLOAD_DELAY は、各リクエスト間の遅延時間を表します。遅延または非同期リクエストを増やすことで、クローラーの効率を向上させることができます。

4. 概要

Scrapy の分散クローラーは、大量のデータを迅速に処理し、クローラーの効率を向上させるのに役立ちます。同時に、ダウンロード ミドルウェアの優先度を下げ、コルーチンの数を調整し、リクエストの遅延を増やすことで、クローラーの効率をさらに向上させることができます。分散クローラーは Scrapy の重要な機能の 1 つであり、これを学習すると、さまざまなクローラーのタスクを簡単に処理できるようになります。

以上がScrapy の分散クローラーとデータ クローリング効率を向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Scrapy は WeChat パブリック アカウント記事のクロールと分析を実装します Scrapy は WeChat パブリック アカウント記事のクロールと分析を実装します Jun 22, 2023 am 09:41 AM

Scrapy は WeChat パブリック アカウント記事のクロールと分析を実装します

悪質なケース分析: LinkedIn で企業情報をクロールする方法 悪質なケース分析: LinkedIn で企業情報をクロールする方法 Jun 23, 2023 am 10:04 AM

悪質なケース分析: LinkedIn で企業情報をクロールする方法

AjaxベースのScrapy非同期読み込み実装方法 AjaxベースのScrapy非同期読み込み実装方法 Jun 22, 2023 pm 11:09 PM

AjaxベースのScrapy非同期読み込み実装方法

Scrapy 最適化のヒント: 重複 URL のクロールを減らし、効率を向上させる方法 Scrapy 最適化のヒント: 重複 URL のクロールを減らし、効率を向上させる方法 Jun 22, 2023 pm 01:57 PM

Scrapy 最適化のヒント: 重複 URL のクロールを減らし、効率を向上させる方法

Scrapy クローラーの実践: ソーシャル ネットワーク分析のための QQ スペース データのクロール Scrapy クローラーの実践: ソーシャル ネットワーク分析のための QQ スペース データのクロール Jun 22, 2023 pm 02:37 PM

Scrapy クローラーの実践: ソーシャル ネットワーク分析のための QQ スペース データのクロール

Scrapy の詳細な使用法: HTML、XML、および JSON データをクロールする方法? Scrapy の詳細な使用法: HTML、XML、および JSON データをクロールする方法? Jun 22, 2023 pm 05:58 PM

Scrapy の詳細な使用法: HTML、XML、および JSON データをクロールする方法?

Scrapy は Docker のコンテナ化とデプロイメントをどのように実装しますか? Scrapy は Docker のコンテナ化とデプロイメントをどのように実装しますか? Jun 23, 2023 am 10:39 AM

Scrapy は Docker のコンテナ化とデプロイメントをどのように実装しますか?

Scrapy がどのようにしてクローリングの安定性とクローリングの効率を向上させるのか Scrapy がどのようにしてクローリングの安定性とクローリングの効率を向上させるのか Jun 23, 2023 am 08:38 AM

Scrapy がどのようにしてクローリングの安定性とクローリングの効率を向上させるのか

See all articles