由于我在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
答案 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()