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