2017-07-18 6 views
1

クロール基づく条件Iは、次Scrapyの解析方法を有する:Scrapy -

def parse(self, response): 
     item_loader = ItemLoader(item=MyItem(), response=response) 
     for url in response.xpath('//img/@src').extract(): 
      item_loader.add_value('image_urls', response.urljoin(url)) 
     yield item_loader.load_item() 
     # If item['images_matched'] == True: 
     # yield Request(links, callback=parse) 

これはImagePipelinesに抽出された画像のURLを送信します。特定の条件が満たされている場合、そのページから追加のリンクをクロールするようにする必要があります。イメージの内容のチェックサムは、ハッシュのリストと一致します。


私の問題は、私はそれがImagesPipelineに仕上がっていますし、それはすべてのデータが取り込まれます一度項目にアクセスする方法がわからないということです。意味item['images_matched']は、解析メソッドではなく、パイプラインに設定されます。この


編集する項目または異なるアプローチへのアクセスのいずれかとが必要です:私はyield後、以下を追加し、機能することを発見しました。

yield Request(link, callback=parse, meta={'item': item_loader.load_item()}) 

しかし、これは非常に悪いコーディングのように思えます。 1つの属性をチェックするためにそれを渡すことは奇妙です。より良い方法がありますか?

答えて

1

だけ変数に項目を割り当て、その変数をもたらす:文がパイプラインの後に実行されます

item = item_loader.load_item() 
yield item 
if item['images_matched']: 
    yield Request(links, callback=parse) 

「が」。

+0

ありがとうございました。私は実際にそのようなことを試みましたが、うまくいきませんでした。私がそのコードを削除したときに私の間違いがどこにあったのか分かりません。 – Akustik