Scrapy Spider每循环只生成一个项目

时间:2017-01-17 20:33:01

标签: python scrapy generator scrapy-spider

由于我在for循环结束时添加了另一个请求,为了测试链接,Spyder只为循环的第一个索引生成Items。

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

之前我刚刚产生了产品项目,但由于该项目在回调中被返回,我不知道我的问题在哪里。

回调只是:

def test_link(self, response):
    item = response.meta['item']
    item['link_fehlerhaft'] = response.status
    yield item

还有完整的代码,也许问题出在其他任何地方: http://pastebin.com/tgL38zpD

1 个答案:

答案 0 :(得分:0)

这是你的罪魁祸首:

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

您并未将递归xpath置于您拥有的产品节点之上。要修复它,只需将.附加到xpath以指示当前节点为root:

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