ホームページ  >  記事  >  バックエンド開発  >  Scrapy を使用してスケジュールされたタスク クローラーを実装する方法

Scrapy を使用してスケジュールされたタスク クローラーを実装する方法

王林
王林オリジナル
2023-06-22 12:54:562859ブラウズ

インターネットの発展に伴い、Web クローラーはデータ収集と分析に広く使用されています。 Scrapy は、強力な機能と効率的な処理機能を提供する、一般的に使用されるクローラー フレームワークです。データの定期的なクロールが必要なビジネス シナリオの場合、Scrapy はスケジュールされたタスク クローラーをどのように実装しますか?この記事では、スケジュールされたタスク クローラーを実装する Scrapy の方法を紹介し、例を示します。

1. Scrapy スケジュール タスクの実装方法

Scrapy は Python に基づいて開発されたクローラー フレームワークであり、スケジュール タスクは Python のスケジュール タスク ツール APScheduler を通じて実装できます。 APScheduler は、複数のタスク トリガーとスケジューラをサポートする軽量のスケジュールされたタスク フレームワークです。 Scrapy フレームワークでは、APScheduler を介してスケジュールされたタスクを実装するのは比較的シンプルで、保守も簡単です。

2. Scrapy スケジュールされたタスクを実装するための具体的な手順

  1. APScheduler パッケージのインストール

pip を使用して Scrapy 環境に APScheduler パッケージをインストールし、実行します次のコマンドで完了です:

pip install apscheduler
  1. スケジュールされたタスクの作成

Scrapy プロジェクトの settings.py ファイルに次のコードを追加します:

# 配置APScheduler

SCHEDULER = "scrapy_apscheduler.schedulers.Scheduler"

# 启用持久化
SCHEDULER_PERSIST = True

# 任务调度器
SCHEDULER_JOBSTORES = {
    'default': SQLAlchemyJobStore(url='sqlite:///jobs.sqlite')
}

# 调度器时间间隔
SCHEDULER_EXECUTORS = {
    'default': {'type': 'threadpool', 'max_workers': 20},
    'processpool': ProcessPoolExecutor(5)
}

# 任务触发器
SCHEDULER_TRIGGER = 'interval'

# 时间间隔
SCHEDULER_SECONDS = 3600

# 启用定时任务扩展
EXTENSIONS = {
    'scrapy_apscheduler.extension.SchedulerExtension': 500,
}

上記のコードでは、APScheduler 関連のパラメーターを構成し、時間間隔を 3600 秒に設定します。これは、クローラー タスクが 1 時間ごとに実行されることを意味します。

  1. クローラ タスクの作成

次に、特定のクローラ タスクの作成を開始できます。さらに、Scrapy プロジェクトの settings.py ファイルに次のコードを追加します。

from scrapy_apscheduler.jobstores import DjangoJobStore

# 配置定时任务
JOBS = [
    {
        'id': 'task1',
        'func': '项目名称.spiders.爬虫名称',
        'args': None,
        'trigger': {
            'type': 'cron',
            ‘hour’: ’14',
            ‘minute’: ’30'
        },
    }
]

# 配置任务存储
SCHEDULER_JOBSTORES = {
    'default': DjangoJobStore(),
}

上記のコードでは、実行時間 14:30 のクローラー タスクを指定します。必要に応じて JOBS のコンテンツを変更する必要があります。 func パラメータは、実行されるクローラ タスクを指定します。たとえば、上記の例では、クローラ名を独自のクローラ名に置き換えるだけです。

  1. Scrapy スケジュールされたタスクを開始します

最後に、Scrapy プロジェクトの起動スクリプトに次のコードを導入します。

from scrapy.cmdline import execute
from scrapy_apscheduler.scheduler import Scheduler

scheduler = Scheduler()
scheduler.start()

execute(['scrapy', 'crawl', '爬虫名称'])

scheduler.shutdown()

上記のコードでは、 Scrapy のスケジュールされたタスクのスケジューラーを導入しました。クローラー タスクを実行する前にスケジューラーを開始し、実行後にスケジューラーを閉じます。

3. 事例分析

以下は、天気予報情報をクローリングして定期的に更新する例です。

import scrapy
import json

class WeatherSpider(scrapy.Spider):
    name = "weather"
    allow_domains = ["tianqi.com"]
    start_urls = ["http://www.tianqi.com/"]
    
    def parse(self, response):
        # 爬取天气预报信息
        weather_info = {"city": "chengdu", "temperature": "25C", "condition": "sun"}
        yield weather_info
        
        # 更新天气预报信息
        with open("weather_file.txt", "w") as f:
            json.dump(weather_info, f)

クローラ ファイルを作成した後、手順に従って Scrapy スケジュールされたタスクを実装し、settings.py でタスクとスケジュールされたタスク スクリプトを構成します。

4. 概要

効率的で信頼性の高いクローラ フレームワークである Scrapy は、スケジュールされたタスク クローラを比較的簡単に実装できます。 APScheduler ツールを使用すると、スケジュールされたタスクをスケジュールし、データの更新と永続化を実現できます。実際のビジネスシーンでは、Scrapy のスケジュールされたタスク クローラーが広く使用されており、企業のデータ分析やアプリケーション開発を強力にサポートします。

以上がScrapy を使用してスケジュールされたタスク クローラーを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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