在我的爬虫中,我从一个excel文件中获得了startURL。
我在这里尝试的是我从亚马逊网站上得到的不同的鞋子变体。我首先刮掉普通的鞋子,例如,耐克女鞋,一旦我进入那个页面,我就得到了每一种变体(鞋的尺寸和颜色)。
像这样的页面
从这个页面上,我得到了每个变体与每个产品代码与变体相关联,但在这个网址我不能刮价格和图片,因为这些数据只出现在我选择一个特定的鞋码和颜色。
在我尝试抓取价格时,我所做的是格式化一个亚马逊链接,这会显示价格(从亚马逊上尝试urls,我发现这是有效的)
我手动选择一个大小和颜色,我得到:
我可以格式化此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)部分。
发布于 2019-01-29 15:52:46
试试这个:
response.xpath('//span[contains(@id, "priceblock")]/text()'.strip()).extract()
-这是错误的。必须为response.xpath('//span[contains(@id, "priceblock")]/text()').extract()
,然后在衣服中剥离array _item“‘precioProducto”数组
https://stackoverflow.com/questions/54412543
复制相似问题