【尊重作者原创,转载请注明出处】
(原创)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()
运行结果:
在浏览器打开:
这种获取方式有时候可以爬到隐藏图片,以上就是我的获取方式,第一次写文章,难免有不足之处,请大家多多包涵和指教!
【尊重作者原创,转载请注明出处】