python获取亚马逊产品详情页大图的2种方法

                      【尊重作者原创,转载请注明出处】

(原创)python获取亚马逊产品详情页大图的2种方法

一般来说刚入门学爬虫,爬取亚马逊是个不错的选择,也算是一个小boss,废话不多说,直接看思路

方法1:改变图片的url

以这个产品为例:

复制图片url:https://images-na.ssl-images-amazon.com/images/I/41WWDvKrG%2BL._SX38_SY50_CR,0,0,38,50_.jpg

然后再网页打开,我们看到的只是小图,

接下来我们把图片的url改下,改成这样:https://images-na.ssl-images-amazon.com/images/I/41WWDvKrG%2BL._SX888_.jpg

这时候我们看到的图片是:

改法:从图片链接的第一个下划线开始改,改成”SX888“,也可以直接改成”SX888.jpg“,最后一个下划线不会影响结果

再试第二张图:

代码如下:

#获取亚马逊商品图片

import time

import re

from lxmlimport etree

from selenium import webdriver

url ="https://www.amazon.com/-/zh/OPI-Nail-Envy-Strengthener-Original/dp/B00178TVXG/ref=zg_bs_17269950011_3?_encoding=UTF8&psc=1&refRID=4E4AAND19DR30CB6HGQJ"#产品详情页链接

# 开发者模式

options = webdriver.ChromeOptions()

driver = webdriver.Chrome(chrome_options=options,executable_path='C:\\Anaconda3\\Scripts\\chromedriver')#这个路径根据自己的环境变量添加

driver.get(url)

time.sleep(5)

sun = etree.HTML(driver.page_source)

#获取图片链接

img_url = sun.xpath('//div[@id="altImages"]/ul/li/span/span/span/span/img/@src')

for rin range(len(img_url)):

#使用正则替换

    c = re.sub('_(.*)','SX888.jpg', img_url[r])

    print('img_url:',c)

driver.quit()

运行结果:

直接点进去看看:

为什么不用requests请求呢?

之前测试太多了,IP都被标记了,老是出现验证码,呜呜呜,加了代理都木用呀,但是用selenium加上延迟时间长一点,基本不会出现验证码,各位小伙伴们,不要暴力爬取呀!


方法2

还是在同一个商品网页


接下来找到这个地方


复制一个链接在浏览器打开看看:

这样我们就知道商品大图url 的所在点,接下来就是提取出大图的链接:


代码如下:

#亚马逊商品图片获取

from seleniumimport webdriver

from lxmlimport etree

import time

def run():

# 开发者模式

 options = webdriver.ChromeOptions()

#添加路径

 driver = webdriver.Chrome(chrome_options=options,executable_path='C:\\Anaconda3\\Scripts\\chromedriver')

url ='https://www.amazon.com/-/zh/OPI-Nail-Envy-Strengthener-Original/dp/B00178TVXG/ref=zg_bs_17269950011_3?_encoding=UTF8&psc=1&refRID=4E4AAND19DR30CB6HGQJ'

driver.get(url)

#睡眠

time.sleep(5)

sun = etree.HTML(driver.page_source)

content = sun.xpath('//*[@id="imageBlock_feature_div"]/script[1]/text()')

#清洗  下面的空格,空行不能删

wer =''.join(content).replace("});",'').replace("P.when('A').register",'').replace(

'("ImageBlockATF", function(A){','').replace('var data = ','').replace('null','"null"').replace('false',

'"false"').replace(

'true','"true"').replace('A.$.parseJSON','').replace('return data;','').replace(

"A.trigger('P.AboveTheFold'); // trigger ATF event.","").replace(';','').replace(' ','')

for yiin eval(wer)['colorImages']['initial']:

    img_max = yi['hiRes']

        if img_max =='null':#如果没有大图,返回中图

            img_max = yi['large']

        print('img_url:', img_max)

driver.quit()

运行结果:

在浏览器打开:


这种获取方式有时候可以爬到隐藏图片,以上就是我的获取方式,第一次写文章,难免有不足之处,请大家多多包涵和指教!

【尊重作者原创,转载请注明出处】

你可能感兴趣的:(python获取亚马逊产品详情页大图的2种方法)