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

Scrapy Spider only generates one item per loop

由于我在 for 循环的末尾添加了另一个请求,以测试一个 link,Spyder 只为循环的第一个索引生成项目。

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

这是你的罪魁祸首:

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

您没有将递归 xpath 定位到您拥有的产品节点。要修复它,只需将 . 预先附加到您的 xpath 以将当前节点指示为根:

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