11

Scrapy に基づいて Web クローラーを構築し、複数のニュース ポータル Web サイトからニュース画像を取得したいと考えています。このクローラーを次のようにしたい:

  1. 永久に実行

    更新を取得するために、定期的にいくつかのポータル ページに再アクセスすることを意味します。

  2. スケジュールの優先順位。

    URL の種類ごとに異なる優先順位を付けます。

  3. マルチスレッドフェッチ

Scrapy のドキュメントを読みましたが、リストした内容に関連するものは見つかりませんでした (十分に注意していない可能性があります)。その方法を知っている人はいますか?または、それについてのアイデア/例を挙げてください。ありがとう!

4

2 に答える 2

12

Scrapy は、Web サイトのスパイダーリングのためのフレームワークです。そのため、基準をサポートすることを目的としていますが、すぐに使用できるわけではありません。一部のタスクについては、おそらくモジュールに比較的慣れる必要があります。

  1. 永久に実行できるかどうかは、Scrapy を呼び出すアプリケーション次第です。あなたはクモにどこへ行くか、いつそこへ行くかを伝えます。
  2. 優先度を与えることは、Scrapy に作成してプラグインする必要があるスケジューラ ミドルウェアの仕事です。これに関するドキュメントはむらがあり、コードを見ていません。原則として、関数はそこにあります。
  3. Scrapy は本質的に、基本的に非同期であり、これはあなたが望んでいるものかもしれません: リクエスト A がまだ未処理である間にリクエスト B を満たすことができます。基礎となる接続エンジンは真正なマルチスレッド化を妨げませんが、Scrapy はスレッド化サービスを提供しません。

Scrapy はアプリケーションではなくライブラリです。モジュールのユーザーが作成する必要がある作業 (コード) は、かなりの量です。

于 2010-02-28T04:47:32.977 に答える
0

running-forever の要件について、ここにいくつかの詳細があります。

シグナルをキャッチする必要があり、シグナルに接続されたメソッドで例外を発生signals.spider_idleさせる必要があります。DontCloseSpider保留中のspider_idleリクエストがない場合、シグナルはスクレイピーエンジンに送信され、デフォルトでスパイダーはシャットダウンします。このプロセスを傍受できます。

コードブローを参照してください:

import scrapy
from scrapy.exceptions import DontCloseSpider
from scrapy.xlib.pydispatch import dispatcher

class FooSpider(scrapy.Spider):
    def __init__(self, *args, **kwargs):
        super(FooSpider, self).__init__(*args, **kwargs)
        dispatcher.connect(self.spider_idle, signals.spider_idle)

    def spider_idle(self):
        #you can revisit your portal urls in this method
        raise DontCloseSpider 
于 2016-08-18T03:30:27.947 に答える