2017-07-11 25 views
0

私は様々な家具のためにウェブをクロールし、その属性を取得するプロジェクトに参加しています。私はDjangoItemを使ってこれらのデータを私のDBに保存しました。私の問題は、forループで使用する応答カウントを取得しています。私はそれが(おそらくない)それを行うための最善の方法かどうかわからない。ここに私のスパイダーがあります:DB(Django、Scrapy)にアイテムを保存するためのループ応答

def parse(self, response): 
    now = timezone.now() 
    for item in response.css('.page-content-area'): 

     for i in range(5): 
      furnitureItem = FurnitureItem() 
      furnitureItem['furniture_type'] = 'Chair' 
      furnitureItem['name'] = item.css('h2 a::text').extract()[i] 
      furnitureItem['description'] = item.css('a span::text').extract()[i] 
      furnitureItem['href'] = item.css('h2 a::attr(href)').extract()[i] 
      furnitureItem['img_source'] = item.css('.lazy::attr(data-original)').extract()[i] 
      furnitureItem['price'] = item.css('.mt3::text').extract()[i] 
      furnitureItem['last_update'] = now 
      yield furnitureItem 

ここの各キーには複数の値があります。私はDBに5項目を保存するかどうかを確認するために5回ループしました。します。私が望むのは、このループでそれを使用するための応答のカウントを取得することです。私はScrapyを使い始めました。私はそれを効果的に使うことができないように感じます。 私は何かアドバイスをいただければ幸いです。 さらに、パイプラインは何を行い、どのような場合に使用すべきかという疑問があります。私は公式の文書を読んだが、私は簡単な説明が必要だと思う。

ありがとうございます。

+0

「このループで使用するには応答のカウントを取得しますか?」これについてもっと詳しく説明できますか? – Granitosaurus

+0

私はループを使わずにスパイダーを実行すると、DBに1つの項目を保存します。各属性の値のリストは、name = [chair1、chair2、..]です。私はそれらの椅子を一つずつDBに保存したい。 – HerpesVirus

答えて

0

私はユースケースを理解していません。つまり、実際にレスポンスカウントが必要な理由です。格納ロジックを実装する方法によっては、反復可能なアイテム(反復処理が可能で事前に数量を必要としないアイテム)を持つか、アイテムを格納するアイテムパイプラインを使用します。パイプライン。

アイテムパイプラインは、アイテムがScrapyエンジンから返されるときにアイテムを処理するために使用されます。アイテムをマングルにしたり、アイテムの値に基づいてアクションを実行したり、アイテムを破棄したりすることができます。私は文書内のexamplesは非常に実例と考えています。また、Scrapy architectureを見ると、大きな画像とパイプラインがどこに収まるかを確認できます。

関連する問題