情人节,女朋友想要一只苏丹红的口红怎么办?

Time will tell.

适逢大小节日时,女朋友想要一只XX色号的口红,怎么办?

这是一个终极问题。

对直男来说,口红,在我们眼里只有一种颜色 —— 红色。

但是这话要让妹子听了,妹子一定会想:“什么,你居然说口红只有红色?直男!”


那么问题来了,

请各位男生从以上色号找出俄罗斯红、苹果红、苏丹红 3种色号……


面对妹子的刁难,男生也不甘示弱,请妹子们从以下找出泰罗奥特曼……


当然,这里是开个玩笑。求生欲强的男生肯定不会这么做的,作为勤奋、聪明、帅气的好男人,我们要学会分辨色号。

所以,接下来就进入我们今天的主题 ——爬取电商网站上所有口红的图片。

顺便学习一下口红色好,将来女朋友说,我想要个苏丹红色号的口红,你买给我好不好,咱们也不至于傻眼,对不。


1、首先,我们先打开京东,输入口红,进入对应的界面,提取出此时的地址:

https://search.jd.com/Search?keyword=%E5%8F%A3%E7%BA%A2&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&stock=1&page=1&s=1&click=0 #第一页
https://search.jd.com/Search?keyword=%E5%8F%A3%E7%BA%A2&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&stock=1&page=3&s=56&click=0 #第二页

我们发现,在上地址中,page字段发生了变化,因此可以推断,page 字段是控制相应的页码,即 page 取1、3、5、7、9…… 时,对应的页码1、2、3、4、5……


2、正则表达式匹配图片的地址,并保存到本地。

正则表达式在前面讲过,这里不再赘述,我们先将抓取的网页解码后保存到本地,找出对应的图片地址,构建正则表达式匹配图片。经过对比,正则表达式构建如下:

<img width="220" height="220" class="err-product" data-img="1" source-data-lazy-img="//(img.+?.jpg)" />

我们还有介绍urllib库的一个函数,urlretrieve()函数,此函数接收两个参数,一个是抓取的地址,一个是保存的路径,功能时将抓取的信息保存在指定的路径。


3、构建异常处理,前面的文章讲过,不再赘述。


4、将逻辑封装在函数内,以便日后复用。事实上,今后编写的任何代码都建议大家将其封装进函数。编写脚本,具体代码及注释如下:

import re#导入re模块

import urllib.request as eq#导入urllib模块

def pachong(url,page):#建名为pachong的函数,传入两个参数————地址和页码

headers=('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134')

opener=eq.build_opener()

opener.addheaders=[headers]

eq.install_opener(opener)#添加头信息,并安装为全局

data=eq.urlopen(url).read().decode('utf-8')#抓取网页,并以utf8格式解码

pat='<img width="220" height="220" class="err-product" data-img="1" source-data-lazy-img="//(img.+?\.jpg)" />'

imagelist=re.compile(pat).findall(data)#正则表达式匹配图片地址

x=1#循环标记

for i in imagelist:

path='D:/python36/pachong/lipstick/'+str(page)+str(x)+'.jpg'

imageurl='http://'+i

try:#异常处理

eq.urlretrieve(imageurl,filename=path)

except eq.URLError as e:

if hasattr(e,'code'):

x=x+1

if hasattr(e,'reason'):

x=x+1

x=x+1

for j in range(1,50):#抓取前26页所有口红的图片

url='https://search.jd.com/Search?keyword=%E5%8F%A3%E7%BA%A2&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&stock=1&page='+str(j)

pachong(url,j)


5、脚本写好后,我们就点击运行吧。大概一分钟后,1361张口红的图片就已经抓取到了我们的电脑,以下是其中的一部分。


在抓取到如此多的图片后,我们当然要好好研究一下色号,争取早日认出 苏丹红

赶紧去学习上手练习吧,情人节指不定可以给女朋友一个惊喜哦 ~ 好啦,以上就分享到这里。如果你对 Python 自动化软件测试、面试题感兴趣的话可以加入我们175317069一起学习。群里会有各项测试学习资源发放,更有行业深潜多年的技术人分析讲解。

欢迎【点赞】、【评论】、【关注】~

Time will tell.(时间会证明一切)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值