Python クローラーの Scrapy フレームワーク シリーズ (23) - 分散型クローラーscrapy_redis 浅い戦闘 [XXTop250 部分クロール]

1. 実践的な説明 (XXTop250 の完全な情報のクロール):

  • まず、単一のプロジェクトでscrapy_redisを使用して、いくつかの重要な点を説明します。

1.1 以前に作成した完全な XXTOP250 プロジェクトを使用しますが、観察しやすいように 1 ページのみ (合計 25 個のムービー) をクロールするように設定します。

ここに画像の説明を挿入

1.2 設定ファイルでscrapy_redisを利用するために必要な設定を行い、公開redsiデータ格納領域を利用する(特定のパイプラインを利用)

# 第一步:加入以下代码:
#设置scrapy-redis
#1.启用调度将请求存储进redis
from scrapy_redis.scheduler import Scheduler
SCHEDULER="scrapy_redis.scheduler.Scheduler"

#2.确保所有spider通过redis共享相同的重复过滤
from scrapy_redis.dupefilter import RFPDupeFilter
DUPEFILTER_CLASS="scrapy_redis.dupefilter.RFPDupeFilter"

#3.指定连接到Redis时要使用的主机和端口     目的是连接上redis数据库
REDIS_HOST="localhost"
REDIS_PORT=6379

# 不清理redis队列,允许暂停/恢复抓取    (可选)    允许暂停,redis数据不丢失     可以实现断点续爬!!!
SCHEDULER_PERSIST = True


# 第二步:开启将数据存储进redis公共区域的管道!
# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    
    
   # 'film.pipelines.FilmPipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 100,
   # 'film.pipelines.DoubanSqlPipeline': 200,
}

1.3 注: 上記の settings.py 設定にはオプションの SCHEDULER_PERSIST があり、これは Redis キューをクリーンアップするかどうかを決定するために使用されます。

  • まず、その値を True に設定してブレークポイントでの継続的なクロールを許可し、Redis Desktop Manager を通じて Redis に保存されているデータのパブリック領域を観察します (そのうちの 1 つが Douban:duperfilter であり、これにはそれぞれのフィンガープリントが含まれていることがわかります)リクエスト URL。1 つは Douban:items で、これには最終的にクロールされたデータが含まれます。)

ここに画像の説明を挿入ここに画像の説明を挿入

ただし、オプションの SCHEDULER_PERSIST の値が False に設定されている場合、ブレークポイントでの継続的なクロールは許可されません。観察してください: (最終的にクロールされたデータを含む Douban:items が 1 つだけあることがわかりました! それぞれのフィンガープリント データはありません)リクエストURL!)

ここに画像の説明を挿入

1.4 ただし、各リクエスト URL の情報は上記の redis では見ることができません。

  • これは、各実行後に redis が存在しないためです。したがって、scrapy_redis が各リクエストを redis に送信することを観察するために、プロジェクトを一定期間実行した後にプロジェクトを強制的に閉じてから、redis を観察します。 Douban:リクエストを含む!!!)

ここに画像の説明を挿入

1.5 ブレークポイントの連続クライミングを実現する例:

  • まず、SCHEDULER_PERSIST を True に設定し、フレームワークをしばらく実行した後、すぐに強制中断します。

  • ローカル txt データを保存するためのパイプラインが settings.py で開かれることに注意してください。
    ここに画像の説明を挿入
    ローカルに保存されている 25 個のデータがないことがわかります。これは、ブレークポイントがクロールを続け、その後、以前に中断されたポイントがクロールを続けるためです。
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_44907926/article/details/131798682