[解決済み] 1つのScrapyプロジェクトで、スパイダーごとにパイプラインを使い分けるには?
2023-01-26 04:15:33
質問
私は複数のスパイダーを含むscrapyプロジェクトを持っています。 どのパイプラインをどのスパイダーに使用するかを定義する方法はありますか?私が定義したパイプラインのすべてが、すべてのスパイダーに適用されるわけではありません。
ありがとうございます。
どのように解決するのですか?
構築する
Pablo Hoffmanによる解決策
の解決策をもとに、次のようなデコレータを
process_item
メソッドをチェックするようにします。
pipeline
属性をチェックします。例えば
def check_spider_pipeline(process_item_method):
@functools.wraps(process_item_method)
def wrapper(self, item, spider):
# message template for debugging
msg = '%%s %s pipeline step' % (self.__class__.__name__,)
# if class is in the spider's pipeline, then use the
# process_item method normally.
if self.__class__ in spider.pipeline:
spider.log(msg % 'executing', level=log.DEBUG)
return process_item_method(self, item, spider)
# otherwise, just return the untouched item (skip this step in
# the pipeline)
else:
spider.log(msg % 'skipping', level=log.DEBUG)
return item
return wrapper
このデコレータが正しく動作するためには、スパイダーは、例えばアイテムを処理するために使用したい Pipeline オブジェクトのコンテナを持つ pipeline 属性を持っている必要があります。
class MySpider(BaseSpider):
pipeline = set([
pipelines.Save,
pipelines.Validate,
])
def parse(self, response):
# insert scrapy goodness here
return item
そして、その中に
pipelines.py
というファイルを作成します。
class Save(object):
@check_spider_pipeline
def process_item(self, item, spider):
# do saving here
return item
class Validate(object):
@check_spider_pipeline
def process_item(self, item, spider):
# do validating here
return item
すべてのパイプラインオブジェクトは、設定のITEM_PIPELINESで定義されるべきです(正しい順序で -- Spiderでも順序を指定できるように変更されるとよいでしょう)。
関連
-
[解決済み】Pythonのvirtualenvを離脱/終了/無効化する方法
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 文字列が空かどうかを確認する方法は?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?