2

スクレイピングされた URL の cdn のエッジ サーバーをクリアする関数を呼び出すスクレイピー パイプラインの作成に取り組んでいます。訪問した URL のリストを簡単に保存する方法はわかりましたが、問題はクローラーがいつ終了したかを知ることです。

cdn の API は 100 個のバッチで URL を取得するため、100 個の URL ごとに clear 関数を簡単に呼び出すことができますが、クロールする URL が 543 個ある場合、最後の 43 個は cdn の clear 関数に送信されません。

スクレイピーシグナルのドキュメントを見てきましたが、

  1. Spider_closed シグナルは、最後のリクエストが受信されたとき、またはすべてのアイテムがパイプラインを通過したときに呼び出されます。後者の場合、最後の 43 個の URL で API を呼び出すことを知るには遅すぎます。
  2. もう 1 つのオプションは、spider_closed シグナルを受信したときに cdn の api を呼び出す拡張機能を追加することですが、スパイダーが見たすべての URL をどのように知るのでしょうか? アイテム パイプラインでそれらのリストを作成できますが、それを拡張機能に取得するにはどうすればよいですか? (ちょうど私が思いついた item_scraped シグナルを使用できるかもしれません。)

そうですね、パイプラインの中で、いつアイテムが来なくなったかを知る方法はありますか? 複数のパイプラインが同時に実行されていますか、それとも各パイプラインはシングルトンですか?

4

1 に答える 1

2

クロールが終了し、すべてがパイプラインを通過した後にスパイダーが閉じたときに、すべてのパイプラインで呼び出される関数があることがわかりました。

def close_spider(self, spider):
    pass

起動時に呼び出される関数もあります。

def open_spider(self, spider):
    pass
于 2012-12-28T20:32:12.977 に答える