【Python实战】海量表情包炫酷来袭,快来pick斗图新姿势吧~(超好玩儿)

news2025/7/19 11:22:34

前言

有温度 有深度 有广度 就等你来关注哦~

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

你有在聊天中遇到不知道该如何表达,如何回复的情况吗?

或许,使用表情包,可以帮你解决这个问题啦~

——开启话题

图一:探出脑袋张望,仿佛在寻找着什么。简单的一个动作就能让对方理解你的意思。

图二:“一脸真诚”地凝视着对方,想找对方聊天之意不言而喻。

哈哈哈~今天就带大家来探索表情包的奥秘吧👇👇👇👇👇

正文 

一大波表情包来袭,请接收💨💨💨

一、运行环境 

1)Python环境

环境: Python 3 、Pycharm、requests、 parsel 。其他内置模块,安装 好

python环境就可以了。 (win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安 

装速度比较慢, 你可 以切换国内镜像源)) 

 第三方库的安装:

pip install + 模块名 或者 带镜像源 pip install -i pypi.douban.com/simple/ +模块名

2)爬虫思路

1. 我们确定一下自己需求(我们要爬什么东西)?  我们爬取表情包网站所有表情包 图片 
 2. 我们要对这个网站 进行分析,找到这些图片来源 
 3. 代码实现 用python对浏览器发送请求 解析数据 提取想要数据内容 保存数据 

二、代码展示

1)单线程

"""
import requests # 第三方模块 是需要我们安装 pip instlal requests  read time out
import parsel # 第三方模块 pip install parsel
import re
import time


def change_title(title):
    mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
    new_title = re.sub(mode, "_", title)
    return new_title

time_1 = time.time()
# 请求网址
for page in range(1, 11):
    url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    # 返回网页源代码
    response = requests.get(url=url, headers=headers)
    # print(response.text)
    # 解析数据   re css xpath
    selector = parsel.Selector(response.text) # 把respons.text 转换成 selector 对象
    # 第一次提取 提取所有的div标签内容
    divs = selector.css('#container div.tagbqppdiv') # css 根据标签提取内容
    for div in divs:
        # 通过标签内容提取他的图片url地址
        img_url = div.css('img::attr(data-original)').get()
        # 提取标题
        title = div.css('img::attr(title)').get()
        # 获取图片的后缀名
        name = img_url.split('.')[-1]
        # 保存数据
        # 因为文件命名不明还有 特殊字符 所以我们需要通过正则表达式 替换掉特殊字符
        new_title = change_title(title)
        # 对表情包图片发送请求 获取它二进制数据
        img_content = requests.get(url=img_url, headers=headers).content
        # 保存数据
        try:
            with open('img\\' + new_title + '.' + name, mode='wb') as f:
                # 写入图片二进制数据
                f.write(img_content)
                print('正在保存:', title)
        except:
            pass

time_2 = time.time()

use_time = int(time_2) - int(time_1)
print(f'总共耗时:{use_time}秒')

2)多线程

import requests # 第三方模块 是需要我们安装 pip instlal requests  read time out
import parsel # 第三方模块 pip install parsel
import re
import time
import concurrent.futures # 线程池



def change_title(title):
    """替换标题中的特殊字符"""
    mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
    new_title = re.sub(mode, "_", title)
    return new_title


def get_response(html_url):
    """对网站发送请求"""
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
    }
    repsonse = requests.get(url=html_url, headers=headers)
    return repsonse


def save(title, img_url, name):
    """保存数据"""
    img_content = get_response(img_url).content
    try:
        with open('img\\' + title + '.' + name, mode='wb') as f:
            # 写入图片二进制数据
            f.write(img_content)
            print('正在保存:', title)
    except:
        pass


def main(html_url):
    """主函数"""
    html_data = get_response(html_url).text
    selector = parsel.Selector(html_data) # 把respons.text 转换成 selector 对象
    # 第一次提取 提取所有的div标签内容
    divs = selector.css('#container div.tagbqppdiv') # css 根据标签提取内容
    for div in divs:
        # 通过标签内容提取他的图片url地址
        img_url = div.css('img::attr(data-original)').get()
        # 提取标题
        title = div.css('img::attr(title)').get()
        # 获取图片的后缀名
        name = img_url.split('.')[-1]
        # 保存数据
        # 因为文件命名不明还有 特殊字符 所以我们需要通过正则表达式 替换掉特殊字符
        new_title = change_title(title)
        save(new_title, img_url, name)


if __name__ == '__main__':
    time_1 = time.time()
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    for page in range(1, 201):
        url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
        exe.submit(main, url)
    exe.shutdown()
    time_2 = time.time()
    use_time = int(time_2) - int(time_1)
    print(f'总共耗时:{use_time}秒')

三、效果展示

1)单线程

2)多线程

看图就可以看出来的哈!单线程跟多线程的区别就留给大家思考啦~

总结

身处表情包时代,谁的手机里能没点藏货?正所谓,没有表情包的聊天是没有灵魂的

想要成为斗图界的天花板,会点儿代码技术必不可少。想要多少自己取就是了。

好啦文章结束,大家记得点点关注哦~

✨完整的素材源码等:可以滴滴我吖!或者点击文末hao自取免费拿的哈~

🔨推荐往期文章——

项目0.2 【Python实战】WIFI密码小工具,甩万能钥匙十条街,WIFI任意连哦~(附源码)

项目0.3 【Python实战】再分享一款商品秒杀小工具,我已经把压箱底的宝贝拿出来啦~

项目0.1 【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。

项目0.4  【Python实战】年底找工作,年后不用愁,多个工作岗位随你挑哦~

🎁文章汇总——

Python文章合集 | (入门到实战、游戏、Turtle、案例等)

(文章汇总还有更多你案例等你来学习啦~源码找我即可免费!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FastDFS学习(四)

目录&#xff1a; &#xff08;1&#xff09;FastDFS搭建集群的环境准备 &#xff08;2&#xff09;FastDFS集群搭建负载均衡环境-使用Nginx进行负载均衡 &#xff08;1&#xff09;FastDFS搭建集群的环境准备 架构图 如果你公司刚好用这个&#xff0c;那你就会搭建集群涉及…

python基于PHP+MySQL的个人博客系统毕设

随着时代和网络的发展,人们越来越希望通过多种模式来展示自己。于是个人博客就出现了,它可以更好的让人们来记录自己的工作和学习方式。博客不仅仅可以让自己抒发个人感情,还可以展示自己真实的生活,从而建立起一种友好的交友平台。 PHP个人博客系统毕设系统分为前台和后台两部…

第2-3-3章 文件处理策略-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

文章目录5.2 文件处理策略5.2.1 FileStrategy5.2.2 AbstractFileStrategy5.2.3 LocalServiceImpl5.2.4 FastDfsServiceImpl5.2.5 AliServiceImpl5.2.6 MinioServiceImpl5.2 文件处理策略 在开发fastDFS和minio实现类之前&#xff0c;需要提前安装部署好fastDFS和minio。搭建教程…

LIS.LCS.LCIS相关问题

文章目录P1020 [NOIP1999 普及组] 导弹拦截P1439 【模板】最长公共子序列P1637 三元上升子序列272. 最长公共上升子序列LCISP1020 [NOIP1999 普及组] 导弹拦截 P1020 [NOIP1999 普及组] 导弹拦截 导弹拦截应该是接触DP的第一题&#xff08;只不过洛谷上的数据加强了&#xff…

Windows平台 使用jarsigner对Apk签名

使用的是JDK自带的jarsigner工具来完成Apk签名 1) 首先找到你的Java Jdk中bin的路径&#xff1a;C:\Program Files\Java\jdk1.8.0_152\bin jarsigner简单使用说明 #jarsigner的命令格式&#xff1a; jarsigner -verbose -keystore [您的私钥存放路径] -signedjar [签名后文件存…

使用高数值孔径透镜进行脉冲聚焦

摘要 尽管对于大多数其他类型的光源而言&#xff0c;静态近似下是足够精确的&#xff0c;但对于超短脉冲来说需要更加精确的方法&#xff0c;其中要考虑到不同光谱模式之间的相关性。在此&#xff0c;我们在空间、时间与场分布上研究了该脉冲传播通过高数值孔径透镜的影响。 建…

基于matlab和Simulink的不同阶QAM调制解调系统误码率对比仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB预览 4.完整MATLAB程序 1.算法概述 正交振幅调制是利用已调信号在相同带宽内的频谱正交来实现两路并行的数据信息传输&#xff0c;其信道频带利用率与单边带调制一样&#xff0c;主要用于高速数据传输系统中。QAM系统组成框图如…

Vue3 - 事件 API 新标准(如何在 Vue3 中怎么用事件总线实现兄弟组件通信?相比 Vue2 有什么不同?)

前言 对比 Vue2 &#xff0c;引出并展开 Vue3 。 本文讲述了事件 API 在 Vue3 中相比 Vue2 有什么变化&#xff0c;以及使用方法和代码示例详细讲解。 回忆 Vue2 大家在写 Vue2 项目时&#xff0c;兄弟组件之间传参&#xff0c;我相信很大一部分开发者都会借助全局的事件总线&…

Kubernetes 系统化学习之 POD原理篇(二)

1. Kubernets 概览回顾 Pod、Service、Volume 和 Namespace 是 Kubernetes 集群中四大基本对象&#xff0c;它们能够表示系统中部署的应用、工作负载、网络和磁盘资源&#xff0c;共同定义了集群的状态。Kubernetes 中很多其他的资源其实只对这些基本的对象进行了组合。 Pod -…

最全JAVA系列视频教程源码

扫描关注公众号&#xff1a;发送对应消息获取源码&#xff08;下面红色字为发送消息内容,取掉空格哦&#xff09; JAVA 基础&#xff1a; java基础 更适合零基础学员&#xff1a; 自Java语言起源始&#xff0c;循序渐进&#xff0c;知识点剖析细致且每章配备大量随堂练…

Android实现动态换肤-原理篇

学习是一个过程。 文章目录Activity中LayoutInflater加载布局总体时序图LayoutInflater源码讲解&#xff08;api28&#xff09;LayoutInflater设置Factory2实现方式LayoutInflater源码总结Activity中LayoutInflater加载布局总体时序图 LayoutInflater源码讲解&#xff08;api28…

高级UI——Paint(滤镜,颜色通道,矩阵运算)

前言 我们已经详细了解到整个android程序&#xff0c;从启动再到绘制的整体流程&#xff0c;从这中间我们又牵扯出了Canvas绘制图形的画板和我们的Paint控制色彩样式的画笔&#xff0c;那么之前基础篇我们就不进行详细的解释&#xff0c;那些API在之前的基础篇已经公布出来&am…

Typescript 函数类型详解

Typescript 函数 前言 虽然 JS/TS 支持面向对象编程&#xff0c;但大部分时候还是在写函数。函数是一等公民。本文介绍下如何在 TypeScript 中使用函数&#xff0c;包括&#xff1a; 函数类型声明函数参数类型&#xff1a;可选参数、默认参数、剩余参数函数返回值类型this 类…

java#5(数组)

目录 数组 1.数组的完整格式:数据类型[] 数组名 new 数据类型[]{元素1,元素2......}; 2.数组的简化格式:数据类型[] 数组名 {元素1,元素2......}; 3.数组的地址​编辑 4.数组的索引(下标,角标) 5.length的使用(表示数组的长度:有几个元素) 6.数组动态初始化:初始化时指…

Redis事务入门及命令

文章目录Redis 事务入门及命令事务概念Redis 事务概念Redis 事务特性Redis 三个阶段入门代码示例Redis 相关命令MULTIDISCARDEXECWATCHUNWATCHRedis 事务入门及命令 事务概念 数据库事务( transaction )是访问并可能操作各种数据项的一个数据库操作序列&#xff0c;这些操作要…

详解 YUV,一文搞定 YUV 是什么!

YUV 是一个颜色模型&#xff0c;通常用作彩色图像管道的一部分。它对彩色图像或视频进行编码时考虑到了人类的感知&#xff0c;与“直接”的 RGB 表示相比&#xff0c;允许减少色度分量的带宽。历史上&#xff0c;术语 YUV 和 Y’UV 用于电视系统中颜色信息的特定模拟编码。今天…

HTML学生作业网页:使用HTML+CSS技术实现传统文化网页设计题材-西安事变历史纪念馆 10页 带视频 带音乐

Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#xff1a;样式 在操作方面上运…

《上海悠悠接口自动化平台》-4.注册用例集实战演示

前言 以注册接口为例&#xff0c;在平台上演示如何维护接口自动化用例 访问地址http://47.108.155.10/login.html 用户名: demo, 密码: demo123 有兴趣的可以自己去查看用例规范 和 运行效果。 API 接口层 先找出注册接口的接口文档&#xff0c;以下是接口文档部分 主要关…

Redis配置哨兵及其机制

目录一、Redis哨兵诞生背景二、关于哨兵三、哨兵机制的基本流程3.1 监控3.2 选主3.3 通知四、关于主观下线和客观下线4.1 主观下线4.2 客观下线五、选主规则3.1 优先级最高的从库得分高3.2 和旧主库同步程度最接近的从库得分高3.3 ID 号小的从库得分高六、配置流程七、总结一、…

网络面试-0x10地址栏输入URL敲入回车后发生了什么?

一、 URL解析 1、 首先判断你输入的是一个合法的URL还是待搜索的关键字 2、如果是URL&#xff0c;对URL进行解析 二、 DNS查询 1、设备 —— 本地DNS服务器 —— xx 递归过程 2、DNS服务器和 顶级域名服务器、二级域名服务器、权威域名服务器之间是迭代过程。 三、 TCP连接 …