首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抓取我在解析时抓取的URL

抓取我在解析时抓取的URL
EN

Stack Overflow用户
提问于 2019-01-29 09:14:58
回答 1查看 53关注 0票数 0

在我的爬虫中,我从一个excel文件中获得了startURL。

我在这里尝试的是我从亚马逊网站上得到的不同的鞋子变体。我首先刮掉普通的鞋子,例如,耐克女鞋,一旦我进入那个页面,我就得到了每一种变体(鞋的尺寸和颜色)。

像这样的页面

https://www.amazon.com/gp/product/B01F2M4EUM?pf_rd_p=1581d9f4-062f-453c-b69e-0f3e00ba2652&pf_rd_r=97H1JYZTD1M7YN7GRJW2

从这个页面上,我得到了每个变体与每个产品代码与变体相关联,但在这个网址我不能刮价格和图片,因为这些数据只出现在我选择一个特定的鞋码和颜色。

在我尝试抓取价格时,我所做的是格式化一个亚马逊链接,这会显示价格(从亚马逊上尝试urls,我发现这是有效的)

例如,从这个url:https://www.amazon.com/gp/product/B01F2M4EUM?pf_rd_p=1581d9f4-062f-453c-b69e-0f3e00ba2652&pf_rd_r=97H1JYZTD1M7YN7GRJW2

我手动选择一个大小和颜色,我得到:

https://www.amazon.com/gp/product/B0187Q0XWS?pf_rd_p=1581d9f4-062f-453c-b69e-0f3e00ba2652&pf_rd_r=97H1JYZTD1M7YN7GRJW2&th=1&psc=1

我可以格式化此Url (插入不同的产品代码)并显示价格。

对于冗长的解释,很抱歉,我只是想尽可能地描述。

我的蜘蛛看起来像这样:

代码语言:javascript
运行
复制
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),这样我就可以得到变量的价格,而不是生成项目

我试着做这样的事情

代码语言:javascript
运行
复制
    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

代码语言:javascript
运行
复制
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)部分。

EN

回答 1

Stack Overflow用户

发布于 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”数组

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54412543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档