【阅读全文】

每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽、用之不竭。作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图。

首先,还是介绍一下设计思路吧,和我们之前做的百度图片下载器2.0一样,使用pyqt5作为UI界面制作的框架,然后就是找一个表情包网站供我们可以下载很多的表情包。

表情包使用的网站是下面这个,大家也可以使用自己发现的表情包网站做下载。

https://www.fabiaoqing.com/biaoqing/

话不多说,我们先说明一下使用到的python库有哪些。

UI界面使用到的pyqt5模块是下面这几个,之前也是一直使用这几个库做UI界面开发的。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
import os

下面是在下载(也可以说是爬虫)表情包时使用到的python应用库。

import requests
import re
from urllib.request import urlretrieve
from fake_useragent import UserAgent

将使用到的标准或非标准库准备好,先来编写UI界面,下面就开始我们的表演了。

class Emoji(QWidget):def __init__(self):super(Emoji, self).__init__()self.init_ui()def init_ui(self):'''初始化UI界面布局:return:'''self.setWindowTitle('表情包下载器   公众号:[Python 集中营]')self.setWindowIcon(QIcon('表情包图标.png'))self.setFixedSize(500, 300)grid = QGridLayout()self.page_size = QLabel()self.page_size.setText('默认每页数量:')self.page_size_text = QLineEdit()self.page_size_text.setText('45')self.page_size_text.setReadOnly(True)self.page_num = QLabel()self.page_num.setText('设置下载页数:')self.page_num_text = QLineEdit()self.page_num_text.setPlaceholderText('请输入整数 1~200')self.page_num_text.setValidator(QIntValidator(1, 200))self.save_dir = QLineEdit()self.save_dir.setReadOnly(True)self.save_dir.setPlaceholderText('图片存储路径')self.save_dir_btn = QPushButton()self.save_dir_btn.setText('设置存储路径')self.save_dir_btn.clicked.connect(self.save_dir_btn_click)self.brower = QTextBrowser()self.brower.setPlaceholderText('下载进度结果展示区域...')self.start_btn = QPushButton()self.start_btn.setText('开始下载表情包')self.start_btn.clicked.connect(self.start_btn_click)grid.addWidget(self.page_size, 0, 0, 1, 1)grid.addWidget(self.page_size_text, 0, 1, 1, 1)grid.addWidget(self.page_num, 1, 0, 1, 1)grid.addWidget(self.page_num_text, 1, 1, 1, 1)grid.addWidget(self.save_dir, 2, 0, 1, 1)grid.addWidget(self.save_dir_btn, 2, 1, 1, 1)grid.addWidget(self.brower, 3, 0, 1, 2)grid.addWidget(self.start_btn, 4, 0, 1, 2)self.thread_ = DownloadThread(self)self.thread_.finished.connect(self.finished)self.thread_.log.connect(self.set_log)self.setLayout(grid)def save_dir_btn_click(self):'''设置存储文件路径:return:'''dir = QFileDialog.getExistingDirectory(self, "选择文件夹", os.getcwd())self.save_dir.setText(dir)def start_btn_click(self):'''启动子线程下载表情包:return:'''self.start_btn.setEnabled(False)self.thread_.start()self.set_log('下载线程已经启动...')def set_log(self, text):'''更新文本浏览器内日志信息:param text::return:'''cursor = self.brower.textCursor()cursor.movePosition(QTextCursor.End)self.brower.append(text)self.brower.setTextCursor(cursor)self.brower.ensureCursorVisible()def finished(self, finished):if finished is True:self.start_btn.setEnabled(True)

编写完UI界面以后开始编写用于下载表情包的子线程吧,子线程编写需要继承pyqt5中的QThread线程来编写。

class DownloadThread(QThread):finished = pyqtSignal(bool)log = pyqtSignal(str)def __init__(self, parent=None):super(DownloadThread, self).__init__(parent)self.parent = parentself.working = Truedef __del__(self):self.working = Falseself.wait()def run(self):self.download()def download(self):user_agent = UserAgent()page_num = int(self.parent.page_num_text.text())save_dir = self.parent.save_dir.text()for n in range(1, page_num):url = 'https://www.fabiaoqing.com/biaoqing/lists/page/{}.html'.format(n)headers = {'user-agent': user_agent.random}response = requests.get(url, headers=headers)repx = re.compile('data-original="(.*?)" title="(.*?)"', re.I)texts = repx.findall(response.text)for text in texts:emoji_url = text[0].split('" src="')[0]emoji_name = emoji_url.split('/')[-1]urlretrieve(emoji_url,save_dir + '/' + emoji_name)self.log.emit(emoji_name + ' 下载完成!')self.log.emit('子线程下载完成!')self.finished.emit(True)

最后,使用main函数将页面布局加入到应用的主体循环当中,启动整个应用就大功告成了。

if __name__ == '__main__':app = QApplication(sys.argv)main = Emoji()main.show()sys.exit(app.exec_())

将上面的所有的代码块copy到开发工具(我用的是Pycharm)中直接启动就成了。欢迎大佬到评论区指点~

【往期精彩】

Python 自动清理电脑垃圾文件,一键启动即可...

有了jmespath,处理python中的json数据就变成了一种享受...

解锁一个新技能,如何在Python代码中使用表情包...

万能的list列表,python中的堆栈、队列实现全靠它!

该怎么用pyqt5来实现数据的增、删、改、查功能...

介绍一个文本语音神器,几行代码就能搞定!

python批量自动整理文件

初学者福利:分享五个免费的 Python 学习网站,抓紧收藏吧!

有趣的控制台玩法:一行代码绘制控制台图像!

数据处理小工具:Excel 批量数据文件拆分/整合器...

办公自动化:PDF文件合并器,将多个PDF文件进行合并...

GUI猜数字游戏,直接开玩...

python 表情包下载器,轻松下载上万个表情包、斗图不用愁相关推荐

  1. Google Earth谷歌地球卫片下载器--可下载全球历史卫星,无偏移、高精度

    Google Earth谷歌地球卫片下载器--可下载全球历史卫星,无偏移.高精度 Google Earth谷歌地球卫片下载器 (build662)升级正式发布,水经注万能地图下载器升级正式发布,水经注 ...

  2. 使用Flickr下载器批量下载Flickr的相册

    相信用过Flickr下载图片的人都知道从Flickr上下载原图的操作有点小麻烦.楼主花了许久时间在网上寻找批量下载工具,一直没找到合适的.于是就自己动手写了个Win10应用:Flickr下载器,功能是 ...

  3. 新版带支付功能2021全新最火表情包小程序源码,无限裂变,斗图小程序,头像壁纸,外卖服务内附详细搭建教程

    内附详细搭建教程 1.全新表情包小程序已上线 2.增加外卖系统服务,进行进一步的扩展内容分销 3.独立后台系统,自己运营管理,广告位自己控制 4.流量主可以代开,小程序包通过审核,不通过不收钱 5.不 ...

  4. python tkinter下载器_下载小说还要去找网站?Python使用tkinter打造一个小说下载器...

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  5. Python Tkinter 下载器 多任务下载+多线程下载+多任务断点续存

    功能介绍: 这次的下载器特点:多线程下载 + 多任务下载 + 多任务断点续存 视频演示: Python Tkinter 系列 - 下载器 界面: 轮子 文件大小 界面:Tkinter 下载功能 :re ...

  6. [宅男福利]人人网相册批量下载器(下载红毯照ChinaJoy照神马的最方便了~!)...

    基本上所有的人人网批量下载器我都用过,要么就是被封杀了要么就是难用得要死Bug一堆-- 所以在08的小朋友们毕业走红毯,本宅男一页页翻着校内相册的时候就有写个人人网相册批量下载器的想法了. 现在空下来 ...

  7. 杰理下载器强制下载工具的使用介绍_AC695N696NAD14AD15全系列支持,看完此文就足够了

    目录 一.常见的下载器造型-V2.0版本 二.常见的下载器造型-V4.0版本 三.常见的问题 第1步 ----- 按照接口连接好USB座子 第2步 ----- 插上下载器 第3步 ----- 双击批处 ...

  8. Savieo 万能下载器,下载多达34 站点,包括ins、Facebook

    今天继续安利一个在线下载站点-Savieo ,复制Facebook . Instagram . Vimeo 视频的网址(url),就可以下载,也可以下载Twitch . Twitter .TikTok ...

  9. 自己遇到的 ST-Link 下载器 不能下载的2种情况

    自己使用STlink比较多, 一开始时经常会遇到不能下载的情况,其中一个是因为没给jtag接口的 vtref 供电(使用SWD方式),但是基本都能下载, 很少有不能下载的情况,后来想到了这个原因, 于 ...

最新文章

  1. Facebook 的AI翻身之战!
  2. 这台计算机怎么磁盘清理,电脑硬盘满了怎么清理(教你3招彻底清理内存,瞬间多出几十个G)...
  3. Microsoft SQL Server 2005 查询分页
  4. BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )
  5. 银行委托第三方催收信用卡欠款,是合法吗?
  6. java中字符编码详解
  7. 阿里云与A站在一起后,悄悄干了件大事
  8. 指静脉屏幕说明usart hmi
  9. PointNet论文笔记
  10. 级联删除相关记录在哪_kube-apiserver审计日志记录和采集
  11. Ubuntu运行级别与本地ISO软件源
  12. Phase2 DAY4 List泛形
  13. surfacepro3运行C语言,【微软 Surface PRO3使用总结】C面|D面|噪音|材质_摘要频道_什么值得买...
  14. 电子警察的系统结构和功能设计
  15. Python | 基础学习(二)函数基础、非数字型变量(列表、元组、字典、字符串)、切片、for循环
  16. Correct the classpath of your application so that it contains compatible versions of the classes com
  17. 服务器物理内存如何卸载,win7电脑物理内存过高怎么清理
  18. 关于游戏中仓库类的设计
  19. 【idm】idm突破cookie封锁 (解决http:1.1 403 forbidden)(附charles使用教程)
  20. java 变量不初始化_Java之哪些情况下变量不会初始化

热门文章

  1. .NET Reflector 资料收集
  2. 随机产生10以内的加减乘除法,输入结果;退出时统计答题总数,正确个数和正确率
  3. linux用户注销的方法,linux退出登录_Linux下注销登录用户的方法
  4. 系统重构:从Jar包冲突搞到类加载机制,就是这么霸气
  5. 服务端技术进阶(四)一文读懂分布式系统本质:高吞吐、高可用、可扩展
  6. 碧桂园化身产城运营服务商,潼湖科技小镇成为其智慧产城示范区
  7. 荧光标记的多肽/氨基酸(FITC修饰/AMC修饰)齐岳生物
  8. WiFi定频操作二:TX测试-rtwpriv-----WWIFI5G测试指令
  9. 华为鸿蒙麒麟玉兔_华为鸿蒙麒麟玉兔_网传华为鸿蒙OS路线表:覆盖麒麟9000到麒麟710...
  10. 超过6万个变种 灰鸽子病毒的“七宗罪”