点击上方蓝字关注 学Python不迷路
一、前言
有时候我不是很理解聊天斗图的现象,年轻人也就罢了,但我这种四十多岁的圈子里,居然还盛行聊天斗图这种风气…一把年纪了还当斗图狂魔…
他们的图怎么就这么多?结果一问,每个人手机里都专门存了几十张表情包,有的人甚至存了上百张…原来这就是他们“嚣张”斗图的原因?!
我想了想,斗图不就是比谁的表情包多吗?那谁能比我们程序员表情包多?爬虫一爬就是成千上万张!
今天就教大家一招用Python爬虫一键爬取海量表情包,分分钟碾压那些斗图狂魔!并附上源码。
二、思路解析
1.创建请求头,也被称为伪装浏览器
可能有些同学会问了,什么是请求头啊。请求头其实就是一个用户代理,在请求头中是包含了当前用户的操作系统版本信息以及当前用户访问网站所使用的浏览器版本信息。
那么为什么要创建请求头呢,因为在网站访问的过程中,有大部分网站会对当前请求做验证,来判断当前的请求是否合法(不是使用浏览器来获取网站数据的话会被认为非法请求)。如果不添加请求头的话,可能会出现当前网站没有访问权限。
创建方法:
1.打开浏览器
2.按住f12
3.选中NetWork选项卡
4.点击筛选出来的链接(链接选择随意)
5.找到user-agent选项并复制
'user-agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
2.使用requests 网络请求库完成网站数据请求
当我们创建完成请求头之后就需要访问网站拿到网站的页面数据了,那么如何获取网站数据呢,这时候就需要使用requests来帮助我们获取了。
在使用requests之前,需要先下载安装。
下载安装命令:pip install requests -i https://pypi.douban.com/simple
安装完成之后我们就可以使用requests了,使用方法:
requests.get(‘https://fabiaoqing.com/biaoqing/lists/page/1.html’, headers=headers).text
在获取网页数据的时候,需要调用http协议中的get方法来获取页面数据,一般情况下会返回html页面源代码
需要传入的参数:网站的域名以及请求头
如果想获取文本数据,那么就调用requests中内置的text方法返回文本数据,如果想要获取二进制数据则使用内置的content方法。
3.获取数据后使用bs4对页面数据进行提取
因为一个页面包含的数据太多了,例如:搜索框、页面广告、ICP备案号等等。但是我们只是想要获取页面中的表情包图片,那该怎么办呢?这时候我们就需要用到一个非常好用的第三方包:bs4
使用方法:
(1)在浏览器中按住f12调出开发者工具,点击Elements,之后点击元素选择器(左边的小箭头),之后选中页面上的图片,左键点击。浏览器就会帮助我们定位图片所在html代码的位置
(2)看到被选中的标签后,查看当前图片的元素标签,当前标签是img,观察当前标签中的属性,有一个class属性,复制该属性的值
(3)调用方法:find_all(‘img’, class_=‘ui image lazy’),调用之后会返回图片标签的列表
(4)对列表进行循环,将img标签中的data-original属性的值提取出来
(5)提取完成之后将会获得当前页面所有的图片标签,我们对当前获取的链接进行二次请求并使用python内置的with open方法将图片数据下载到本地
至此,一个简单的微信表情包爬虫就制作完成。
三、源码
以下是代码的截图,代码源文件请在后台回复关键字“爬表情包”自助领取。
end