【发布时间】:2019-01-29 01:14:57
【问题描述】:
在我拥有的蜘蛛中,我从一个 excel 文件中获取我的 startURL。
我在这里尝试抓取的是我从亚马逊网站获得的不同款式的鞋子。我首先抓取通用鞋,例如,Nike Woman Shoe,然后,一旦进入该页面,我就会得到所有变体(鞋码和颜色)。
类似这个页面的东西
从这个页面我得到了每个变体以及与变体相关的每个产品代码,但是在这个 URL 中我无法抓取价格和图片,因为只有当我选择特定的鞋码和颜色时才会出现这些数据。
我在尝试抓取价格时所做的是格式化亚马逊链接,这会显示价格(尝试从亚马逊获取网址,我发现这可行)
我手动选择尺寸和颜色,然后得到:
这个网址我可以格式化(插入不同的产品代码)并显示价格。
对不起,解释太长了,只是尽量描述性。
我的蜘蛛是这样的:
def parse(self,response):
variationValues = re.findall(r'variationValues\" : ({.*?})', ' '.join(script))[0]
asinToDimensionIndexMap = re.findall(r'asinToDimensionIndexMap\" : ({.*})', ' '.join(script))[0]
variationValuesDict = json.loads(variationValues)
asinToDimensionIndexMapDict = json.loads(asinToDimensionIndexMap)
productKeys = asinToDimensionIndexMapDict.keys()
for key in productKeys:
numeroTalle = asinToDimensionIndexMapDict[key][0]
numeroColor = asinToDimensionIndexMapDict[key][1]
clothesAmz_item['codigoGenericoProducto'] = codigoUUID
clothesAmz_item['codigoEspecificoProducto'] = key
clothesAmz_item['nombreProducto'] = response.xpath('normalize-space(//span[contains(@id, "productTitle")]/text())').extract()
clothesAmz_item['urlProducto'] = 'https://www.amazon.com/gp/product/{}?pf_rd_p=1581d9f4-062f-453c-b69e-0f3e00ba2652&pf_rd_r=48QP07X56PTH002QVCPM&th=1&psc=1'.format(key)
clothesAmz_item['talleProducto'] = variationValuesDict["size_name"][numeroTalle]
clothesAmz_item['modeloProducto'] = variationValuesDict["color_name"][numeroColor]
yield clothesAmz_item
所以,我想做的是,解析我得到的 url (urlProducto),而不是生成项目,以便我可以得到变体的价格
我试着做这样的事情
yield Request(urlProducto, callback = self.parse_specific)
def parse_specific(self,response):
clothesAmz_item['precioProducto'] = response.xpath('//span[contains(@id, "priceblock")]/text()'.strip()).extract()
yield clothesAmz_item
通过这样做,实际上什么都没有发生,在控制台中,我可以看到我的蜘蛛浏览了我从文件中获取的 startURL,但没有收集任何数据。
我想补充一点,如果我运行我在这个问题上写的第一个蜘蛛,程序运行得很好,但我不能得到单独的价格
知道发生了什么吗?
items.py
class ClothesItem(scrapy.Item):
#DatosProducto
codigoGenericoProducto = scrapy.Field()
codigoEspecificoProducto = scrapy.Field()
categoriaProducto = scrapy.Field()
nombreProducto = scrapy.Field()
precioProducto = scrapy.Field()
urlProducto = scrapy.Field()
talleProducto = scrapy.Field()
modeloProducto = scrapy.Field()
#Imagenes
img0Producto = scrapy.Field()
img1Producto = scrapy.Field()
img2Producto = scrapy.Field()
img3Producto = scrapy.Field()
img4Producto = scrapy.Field()
img5Producto = scrapy.Field()
pass
编辑:添加 items.py 和更多蜘蛛代码。运行程序时我没有收到任何错误。在我添加 Request.(url, callback = parse_specific) 部分之前,程序运行良好。
【问题讨论】:
-
你能提供你的完整代码吗? (在最后一个 sn-p
clothesAmz_item甚至没有定义)你有什么错误吗?你试过debugging吗?你知道Request.meta吗?
标签: python-3.x web-scraping scrapy