前言

你还在,你还在,头悬梁锥刺股。
下,下,下,表情包吗?
你还以为盗个图战胜小学生。
就能成为斗图王吗?
你还把会做图当成斗图资本吗?
你还为斗不过图而痛哭流泪吗?
No no no no no
No no no no no no no
人生苦短
Q群数十小学生变身斗图王的梦想
你可以复制
是时候写个爬虫了

前提准备

本次教程将为您讲解如何爬取斗图啦网的表情包,网址链接:http://www.doutula.com
为完美食用本次教程,需要亲先提前准备好以下编程环境:
python3【博主使用的是3.7】
requests库【版本无要求】
lxml库【需要含有etree模块的才行,博主使用的是4.3.3】
火狐浏览器【这个不一定,看个人习惯】

网页分析

打开斗图啦首页【http://www.doutula.com】。
我们可以看到有许多的表情包,但是我们不是每次都会发全部类型的表情包。
通常采取的是发送符合某个主题或关键字的表情包,所以我们就需要搜索功能。
在红框处的搜索框中输入【女装大佬】,尝试搜索以女装大佬为关键字的表情包,看看网址有何变化。
搜索之后将会打开如下链接【http://www.doutula.com/search?keyword=女装大佬 】,页面内容如下:
我们可以发现url中【keyword】的参数就是我们搜索的关键字【女装大佬】
我们可以大胆的猜测下通过修改【keyword】的值就可以得到对应关键字的表情包的搜索页。
尝试一:
修改【keyword】的值为【金馆长】,看看能否打开金馆长的搜索页面。修改后的网址为:
【http://www.doutula.com/search?keyword=金馆长】
看着页面上桀骜不羁的笑脸,就知道我们打开了金馆长表情包的搜索页
我们再做一次尝试验证我们的想法。

尝试二:
修改【keyword】的值为【你好骚啊】,看看能否打开【品如的衣柜】。修改后的网址为:
http://www.doutula.com/search?keyword=你好骚啊
看着这样欲笑又止的侧脸,我知道我成功的打开了品如的衣柜(。・∀・)ノ

看到这证明我们猜想是对的,搜索页是通过url中【keyword】的值控制的
我们回到【女装大佬】的搜索页,链接地址:【http://www.doutula.com/search?keyword=女装大佬 】,看看如何获取图片的url。
我们再图中红框处的国民扳手的图片上【右键】选择【查看元素】,提取处图片的url地址
【http://img.doutula.com/production/uploads/image/2019/03/28/20190328703619_OEuNCP.jpg】
我们在打开这个网址,看看对应的是不是国服扳手的表情包
没错,就是那张图片,现在回到【女装大佬】搜索页
按【ctrl】+【u】打开页面源代码

按【ctrl】+【f】打开快速搜索框
在搜索框中粘贴上我们前面获取的图url,查看在url处于源码里哪个标签中。
图片url:【http://img.doutula.com/production/uploads/image/2019/03/28/20190328703619_OEuNCP.jpg】
可以看到处于含有class属性值为【“img-responsive lazy image_dtb”】的img标签中的【data-backup】属性里

最后我们在总结下:
1.通过修改url【http://www.doutula.com/search?keyword=】中【keyword】的值可以打开不同内容的搜索页
2.图片url在网页源码中含有class属性值为【“img-responsive lazy image_dtb”】的img标签中的【data-backup】属性里

现在我们有了思路可以开始写代码了。

代码拆解

  1. 我们创建一个名为名为【斗图啦爬虫.py】的Python程序文件,并在当前目录中创建一个名为【img】的文件夹作为后期的图片保存使用


2. 接下来就是老生常谈的设置程序信息和导入模块了

# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年8月23日from lxml import etree
import requests

第一行# -*- coding:utf-8 -*-代表设置程序运行时使用的默认编码为utf-8
第二行和第三行分别时记录作者和创作时间
第四行from lxml import etree 从lxml库中导入etree模块,用于后期从网页代码中提取内容
第五行import requests导入requests模块,用于从网站获取资源

3.创建类与函数

class DouTuLa():def __init__(self,key):"""参数设置"""self.key = keydef main(self):"""控制程序运行"""pass
doutula = DouTuLa('女装大佬')
doutula.main()

第一行class DouTuLa():我们设置了一个名为DouTuLa的函数
第二至四行我们设置使用这个函数时需要传出一个key关键字,并且将关键字的内容保存到变量self.key中,key关键字用于存储我们要搜索的关键字
第六行至第八行我们设置了一个名为main的函数用于控制程序运行
第九行至第十行我们给类DouTuLa创建了一个doutula实例,并传入了参数【女装大佬】作为表情包搜索参数

4.在__init__函数中添加一些程序中后面要使用的变量

    def __init__(self,key):"""参数设置"""#设置搜索的表情包关键字self.key = key#生成表情包搜索页面urlself.url = "http://www.doutula.com/search?keyword={}".format(key)#设置网页请求头self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0'}

5.网页下载函数

    def get_html(self,url):"""下载网页"""return requests.get(url,headers=self.headers).text

我们定义了一个get_html函数,函数使用时需要传入url作为下载的网页网址。
将下载到的网页作为返回值弹出。
6.图片下载函数
我们定义一个图片下载函数,用于下载并保存图片

    def get_img(self,url):"""下载用户指定的图片"""img = requests.get(url,headers=self.headers).contentfile = 'img\\{}'.format(self.key)+url.split('/')[-1]with open (file,'wb') as save_img:save_img.write(img)

第一行我们定义了一个名为get_img的函数用于下载保存图片,调用时需要传入图片的url
第三行我们使用requests下载图片并保存到img变量中
第四行我们设置了文件名
第五行至第六行我们将图片保存
7.主函数

    def main(self):"""控制程序运行"""#下载网页html=self.get_html(self.url)#将网页转换为etree格式html_etree = etree.HTML(html)#提取图片urlimg_urls = html_etree.xpath('//img[@class="img-responsive lazy image_dtb"]/@data-backup')#循环提取处图片urlfor img_url in img_urls:self.get_img(img_url)

第四行我们先下载网页
第六行我们将网页转化为etree格式
第八行我们从网页中匹配处图片url
第十行至第十一行我们循环提取出图片url并下载保存
8.效果展示

完整代码

# -*- coding:utf-8 -*-
#作者:猫先生的早茶
#时间:2019年8月23日from lxml import etree
import requestsclass DouTuLa():def __init__(self,key):"""参数设置"""#设置搜索的表情包关键字self.key = key#生成表情包搜索页面urlself.url = "http://www.doutula.com/search?keyword={}".format(key)#设置网页请求头self.headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:66.0) Gecko/20100101 Firefox/66.0'}def get_html(self,url):"""下载网页"""return requests.get(url,headers=self.headers).textdef get_img(self,url):"""下载用户指定的图片"""img = requests.get(url,headers=self.headers).contentfile = 'img\\{}'.format(self.key)+url.split('/')[-1]with open (file,'wb') as save_img:save_img.write(img)def main(self):"""控制程序运行"""#下载网页html=self.get_html(self.url)#将网页转换为etree格式html_etree = etree.HTML(html)#提取图片urlimg_urls = html_etree.xpath('//img[@class="img-responsive lazy image_dtb"]/@data-backup')#循环提取处图片urlfor img_url in img_urls:self.get_img(img_url)doutula = DouTuLa('女装大佬')
doutula.main()

【python--爬虫】斗图啦表情包爬虫相关推荐

  1. Python爬虫 | 斗图网表情包抓取

    Python爬虫 | 斗图网表情包抓取 1.数据来源分析 2.制作div_list 3.发起请求 4.保存图片 5.批量获取 6.完整代码 声明 1.数据来源分析   打开斗图吧的主页,发现网址非常有 ...

  2. Python爬虫实战(5)斗图啦表情包下载(单线程)

    Python爬虫实战(5)斗图啦表情包下载(单线程) 网页分析 代码 注意事项 文件名的中文标点 文件后缀os.path.splitext 网页反爬虫 输出结果 总结 利用BeautifulSoup ...

  3. python表情包斗图_Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

  4. 爬虫笔记——多线程爬取斗图网表情包(threading)

    爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...

  5. 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!

    最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...

  6. Python多线程爬取斗图啦表情包

    斗图啦表情包多线程爬取-撸代码 首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os模块 import asyncio import aiohttp ...

  7. 10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了

    10000+ gif表情包不是梦,get这一篇文就够了!!!小哥哥快到碗里来,再也不怕斗图没有表情包了 1. 依赖模块及安装 2. 查找网页规律 3. 源码 最近看的爬虫的博客太多,小小的学习了下.主 ...

  8. 小程序源码:聊天斗图微信表情包

    这是一款微信表情包小程序 支持自定义搜索,另外支持长按发送给好友 当然也支持长按保存表情包 这个源码比较单调一点,没有那么多的分类 小程序源码下载地址: 小程序源码:聊天斗图微信表情包-小程序文档类资 ...

  9. 小程序源码:聊天斗图微信表情包-多玩法安装简单

    这是一款微信表情包小程序 支持自定义搜索,另外支持长按发送给好友 当然也支持长按保存表情包 这个源码比较单调一点,没有那么多的分类 小程序源码下载地址: 小程序源码:聊天斗图微信表情包-多玩法安装简单 ...

最新文章

  1. 参照STM32时钟树配置STM32CubeMX Clock Configuration(STM32L011G4U6为例)
  2. 近期Freecodecamp问题总结
  3. CS231n 学习笔记(3)——神经网络 part3 :最优化
  4. [WCF 4.0新特性] 标准终结点与无(.SVC)文件服务激活
  5. 《Agile Impressions》作者问答录
  6. SAP 电商云 Spartacus SSR Optimization Engine 几处 timeout 的执行顺序
  7. SAP Kyma上都有哪些namespace?
  8. mysql和tdengine_TDengine 基本操作
  9. 开发工程师的维护意识存在不?
  10. Java学习笔记——常用类
  11. [Linux] 编译 与 链接
  12. 软件工程专业学python_笨办法学Python(0)
  13. OpenCV 文字绘制——cv::putText详解
  14. RemotingTooMuchRequestException: sendDefaultImpl call timeout
  15. 串口调试助手fx2n_PLC串口调试助手
  16. 非冯计算机的原理方法,计算机之父 冯诺依曼_非冯诺依曼计算机_冯诺依曼提出的原理(7)...
  17. 未明学院数据分析报告:漫威之父斯坦· 李走了,大数据分析他的“漫威宇宙”
  18. python-spider个人笔记
  19. 跟柴静的《穹顶之下》学习演讲的十大技巧
  20. C#控件开发---控件属性编辑器

热门文章

  1. 求n维空间点的距离(改进版)
  2. 项目管理中,如何实现有效的项目预算管理?
  3. 2067:【例2.5】圆
  4. 《花滑女王》看辛酸爱情和运动生涯的跌宕起伏
  5. 田泽安老师——混沌第1章备忘
  6. 基于前端Vue后端.NetCore Web后台管理系统通用开本框架采用前后端分离技术,前端使用vue2.6.0,后端使用.netcore3.1,支持跨平台、多租户
  7. xrd连续扫描和步进扫描_XRD样品制备与实验条件的选择
  8. 凯斯西储大学计算机,凯斯西储大学本科留学
  9. Godot Engine:用InterpolatedCamera实现第三人称游戏跟随摄像机
  10. Mac实用的必备软件