2017-01-17 1 views
0

ごとに項目を生成します。Scrapyスパイダーは、私がリンクをテストするために、forループの終了時に別の要求を追加するので、スパイダーのみループの最初のインデックスの項目を生成するループ

def parse_product_page(self, response): 
    products = response.xpath('//div[@class="content"]//div[@class="tov-rows"]//div[@class="t-row"]') 
    for x, product in enumerate(products): #ERROR: Just gives an item for the first product 
     product_loader = VerbraucherweltProdukt() 
     product_loader['name'] = product.xpath(
      '//div[@class="t-center"]//div[@class="t-name"]/text()').extract_first() 
     request = scrapy.Request(non_ref_link,callback=self.test_link, errback=self.test_link) 
     request.meta['item'] = product_loader 
     yield request 

私は単に製品アイテムをもたらしたとき、それはすべての前に働いたが、項目がコールバックで返されているので、私は私の問題を産む場所を知りません。

コールバックだけである。また、

​​

完全なコード、おそらく問題はどこにもある: http://pastebin.com/tgL38zpD

答えて

0

ここにあなたの犯人です:

link = product.xpath('//div[@class="t-right"]//a/@href').extract_first() 

あなたが接地していませんあなたが持っている製品ノードへの再帰的なxpath。事前にルートとして現在のノードを示すために、あなたのxpathに.を追加するだけで、それを修正するには:

link = product.xpath('.//div[@class="t-right"]//a/@href').extract_first() 
+0

神聖なたわごと、それは一生懸命監督だろう。どうもありがとうございます。私はループとコールバックだけを見ました。 –

+0

は何の問題@JoshuaMenkeない、この問題はおそらくstackoverflowの上で最も一般的なのXPathに関連する問題です。巨大なスローオフは、あなたが主にそれらを使用する場合は、不意を突かれるので、CSSセレクタがこの問題の影響を受けているということです – Granitosaurus