分散型爬虫類プロジェクトを簡単かつ効率的に導入および監視する方法

5420 ワード

需要分析
プライマリユーザー:
  • 開発ホストが1台しかないので、ブラウザでScrapy爬虫類プロジェクトを直接展開・実行してほしい
  • ステップアップユーザー:
  • クラウドホストがあり、アイデンティティ認証を統合したい
  • 定期的に爬虫類の自動起動を希望し、ウェブページ情報モニタリングを実現
  • プロフェッショナルユーザー:
  • N台のクラウドホストがあり、Scrapy-Redisにより分散爬虫類を構築
  • すべてのクラウドホストの動作状態をページで直感的に確認したい
  • 一部のクラウドホストを自由に選択し、プロジェクトを一括配置・実行し、クラスタ管理を実現したい
  • 自動ログ解析を行い、爬虫類の進捗状況を把握したい
  • 現在の爬虫類の自動停止を含む特定のタイプの異常ログが発生した場合の通知を速やかに取得したい
  • インストールと構成
  • すべてのホストがScrapydをインストールして起動していることを確認し、リモートでScrapydにアクセスする必要がある場合は、Scrapydプロファイルのbind_addressをbind_address = 0.0.0.0に変更し、Scrapydサービスを再起動します.
  • 開発ホストまたはいずれかのホストにScrapydWebをインストールする:pip install scrapydweb
  • コマンドの実行scrapydwebScrapydWebの起動(初回起動で現在の作業ディレクトリに自動的にプロファイルが生成されます).
  • HTTP基本認証有効(オプション):
  • ENABLE_AUTH = True
    USERNAME = 'username'
    PASSWORD = 'password'
    
  • Scrapyd serverを追加し、文字列とメタグループの2種類の構成フォーマットをサポートし、認証情報とグループ/ラベルの追加をサポートする:
  • SCRAPYD_SERVERS = [
        '127.0.0.1',
        # 'username:password@localhost:6801#group',
        ('username', 'password', 'localhost', '6801', 'group'),
    ]
    
  • 実行命令scrapydwebScrapydWebを再起動します.

  • Web UIへのアクセス
    ブラウザからアクセスしてログインするhttp://127.0.0.1:5000.
  • Serversページは、すべてのScrapyd serverの運転状態を自動的に出力します.
  • グループ化とフィルタリングにより複数台のScrapyd serverを自由に選択し、上のタブページでScrapydが提供するいずれかのHTTP JSON APIを選択し、1回の操作、一括実行を実現する.
  • LogParserを統合することで、Jobsページから爬虫類タスクのpagesとitemsデータが自動的に出力される.
  • ScrapydWebデフォルトでは、スケジュール作成スナップショットにより爬虫類タスクリスト情報をデータベースに保存しており、Scrapyd serverを再起動してもタスクリスト情報を失うことはありません.(issue 12)

  • プロジェクトの配備
  • Scrapyd serverクラスタへのワンタッチ配置をサポートする.
  • 構成SCRAPY_PROJECTS_DIRScrapyプロジェクト開発ディレクトリの指定により、このパスの下にあるすべての項目が自動的に表示されます.デフォルトでは、最新の編集項目が選択されています.
  • ScrapydWebがリモートサーバ上で実行する場合、現在の開発ホストから通常のeggファイルをアップロードするほか、zip/tar/tarにプロジェクトフォルダ全体を追加することも可能である.gzファイルを圧縮して直接アップロードすれば、手動でeggファイルにパッケージする必要はありません.

  • 爬虫類を動かす
  • ドロップダウンボックスで直接プロジェクト、version、spiderを選択します.
  • Scrapy settingsおよびspider argumentsへの転送をサポートする.
  • APSchedulerベースのタイミング爬虫タスクの作成をサポートする.(大量の爬虫類タスクを同時に起動する必要がある場合は、Scrapydプロファイルのmax-procパラメータを調整する必要があります)
  • Scrapyd serverクラスタでの分散爬虫類のワンタッチ起動をサポートする.

  • ログの分析と可視化
  • 同じホストでScrapydとScrapydWebを実行する場合、設定を推奨するSCRAPYD_LOGS_DIRENABLE_LOGPARSERを設定すると、指定したディレクトリの下にあるScrapyログファイルをタイミングインクリメンタル解析してStatsページの生成を高速化するScrapydWebを起動すると自動的にLogParserが実行され、元のログ・ファイルを要求することによって、メモリとネットワーク・リソースが大量に消費されないようにします.
  • Scrapyd serverクラスタを管理する必要がある場合は、他のホストでLogParserを個別にインストールおよび起動することを推奨します.理由は上記のとおりです.
  • インストールするScrapyバージョンが1.5.1以下であれば、LogParserはScrapyに組み込まれたTelnet ConsoleからCrawlerを自動的に読み取ることができる.statsとCrawlerEngineデータは、Scrapy内部の動作状態を把握するために使用されます.

  • 定時爬虫類タスク
  • 爬虫類タスクのパラメータ情報の表示をサポートし、遡及履歴
  • 一時停止、復旧、トリガー、停止、編集、削除などの操作をサポート
  • メール通知
    ポーリングサブプロセスによるバックグラウンドタイミングシミュレーションによるStatsページへのアクセスにより、ScrapydWebは、特定のトリガが満たされたときに設定に従って自動的に爬虫類タスクを停止し、現在の爬虫類タスクの統計を含む通知メールを送信します.
  • メールアカウント追加:
  • SMTP_SERVER = 'smtp.qq.com'
    SMTP_PORT = 465
    SMTP_OVER_SSL = True
    SMTP_CONNECTION_TIMEOUT = 10
    
    EMAIL_USERNAME = ''  # defaults to FROM_ADDR
    EMAIL_PASSWORD = 'password'
    FROM_ADDR = '[email protected]'
    TO_ADDRS = [FROM_ADDR]
    
  • メールの稼働時間と基本トリガを設定します.次の例では、1時間ごとまたはあるタスクが完了すると、現在の時刻が稼働日の9時、12時、17時となり、ScrapydWebから通知メールが送信されます.
  • EMAIL_WORKING_DAYS = [1, 2, 3, 4, 5]
    EMAIL_WORKING_HOURS = [9, 12, 17]
    ON_JOB_RUNNING_INTERVAL = 3600
    ON_JOB_FINISHED = True
    
  • 基本フリップフロップに加え、ScrapydWebには、「CRITICAL」、「ERROR」、「WARNING」、「REDIRECT」、「RETRY」、「IGNORE」など、さまざまなタイプのlogを処理するためのフリップフロップが用意されている.
  • LOG_CRITICAL_THRESHOLD = 3
    LOG_CRITICAL_TRIGGER_STOP = True
    LOG_CRITICAL_TRIGGER_FORCESTOP = False
    # ...
    LOG_IGNORE_TRIGGER_FORCESTOP = False
    

    次の例では、3つ以上のcriticalレベルのログがログに表示されると、ScrapydWebは現在のタスクを自動的に停止し、現在の時間がメールの稼働時間内であれば通知メールを同時に送信します.
    GitHubオープンソース
    何匹かの公式の大物を生け捕って、急いで見物に行きましょう.スターをクリックして道に迷わないで、feature requestを提出してください!
    my8100/scrapydweb