python中的scrapy.response.follow()出现问题



我是新手,有点小问题。这是我的代码:

import scrapy

class SubcategoriasSpider(scrapy.Spider):
name = 'subCategorias'
start_urls = ['https://donvino.com.ar/categoria-producto/bodegas']
def parse(self, response):
bodegas = response.css('ul.menu#menu-bodegas li')
for bodega in bodegas:
url = bodega.css("a::attr(href)").get()
#name_bodega = bodega.css('a::text').get() 
yield response.follow(url,callback=self.parse_items)
def parse_items(self,response):
vinos = response.css('a.woocommerce-LoopProduct-link.woocommerce-loop-product__link')#no se puede dejar espacio vacío entre palabras, hay que poner un punto

for vino in vinos:      
yield {

'nombre' : vino.css('h2::text').get(),
'precio' : str(vino.css('span.woocommerce-Price-amount.amount::text').get()).replace(",", "")
}

我需要在def parse_items((中添加name_bodega=bodega.css('a::text'(.get((。。。像这样的东西:

yield {
'name_bodega' :  ............
'nombre' : vino.css('h2::text').get(),
'precio' : str(vino.css('span.woocommerce-Price-amount.amount::text').get()).replace(",", "")
}

问题是namebodega不在葡萄酒中。。。所以……我不知道该怎么解决……有没有办法加上bodega这个名字??。提前感谢!!!。

您可以使用meta在回调函数之间传递项

class SubcategoriasSpider(scrapy.Spider):
name = 'subCategorias'
start_urls = ['https://donvino.com.ar/categoria-producto/bodegas']
def parse(self, response):
bodegas = response.css('ul.menu#menu-bodegas li')
for bodega in bodegas:
url = bodega.css("a::attr(href)").get()
name_bodega = bodega.css('a::text').get() 
yield response.follow(url,callback=self.parse_items,meta={'item':{"name_bodegae": name_bodega}})
def parse_items(self,response):
vinos = response.css('a.woocommerce-LoopProduct-link.woocommerce-loop-product__link')#no se puede dejar espacio vacío entre palabras, hay que poner un punto

for vino in vinos:      
yield {
'name_bodega':response.meta.get("item")['name_bodegae'], # or -> response.meta.get("item")["name_bodegae"]
'nombre' : vino.css('h2::text').get(),
'precio' : str(vino.css('span.woocommerce-Price-amount.amount::text').get()).replace(",", "")
}

请参阅此处的详细信息:了解项目和请求如何在回调之间工作

最新更新