応答を解析する複数の方法を持つScrapyスパイダーのコントラクトを書くには、どのような方法が最適ですか? 私はこれを見たanswerしかし、それは私には非常に明確に聞こえませんでした。複数の解析方法を使った治療契約
私の現在の例:parse_product
というメソッドがあり、ページ上の情報を抽出しますが、別のページで同じ製品のために抽出する必要があるデータが多いため、私はyield
新しいリクエストを作成し、新しいコールバックがこれらのフィールドを抽出してアイテムを返すようにします。
問題は、2番目のメソッドのコントラクトを記述すると、メタ属性(ほとんどのフィールドを持つアイテムを含む)がないために失敗するということです。最初のメソッドの契約書を書くと、アイテムの代わりに新しいリクエストを返すので、フィールドを返すかどうかを確認できません。例では
def parse_product(self, response):
il = ItemLoader(item=ProductItem(), response=response)
# populate the item in here
# yield the new request sending the ItemLoader to another callback
yield scrapy.Request(new_url, callback=self.parse_images, meta={'item': il})
def parse_images(self, response):
"""
@url http://foo.bar
@returns items 1 1
@scrapes field1 field2 field3
"""
il = response.request.meta['item']
# extract the new fields and add them to the item in here
yield il.load_item()
、私は第二の方法で契約を置くが、それはresponse.request.meta['item']
に私にKeyError
例外を与え、また、フィールドfield1
とfield2
は、第一の方法に移入されています。
希望は十分です。
これは私が探していた答えではありませんでしたが、実際の答え(存在する場合)よりも多分私を助けました。ありがとうございました。 –