表情包太少?利用Python爬取表情包

本文最后更新于:2020年4月8日 晚上

前言:代码实现了下载动态 下载静态的识别!
当然代码还有很多需要完善的 比如下载完的弹窗 bug也有比如创建空文件夹 只能爬取带ID固定的地址栏的表情包等等
简简单单凑合用!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import requests
from bs4 import BeautifulSoup
import webbrowser
# -*- coding: utf-8 -*-
from tkinter import *
import os

#下载并返回值网页源码的类
def download_all_htmls(id):
#下载页面的HTML,用于分析
url = f"https://www.fabiaoqing.com/bqb/detail/id/"+id+".html"
#读取网页
r = requests.get(url)
#获取它的全部源码并text 并返回
txtc = r.text
return txtc



#先分析标签中的文件名 再将二进制流,名称,格式 并在各自的列表中进行追加
def parse_single_html(html):
#解析HTML,得到数据
#[url=home.php?mod=space&uid=155549]@Return[/url] list((img_title, img_url))
soup = BeautifulSoup(html,"html.parser")
#声明一个文件名的函数 用网页的title标签作为文件名
global wenjian #声明为全局 方便下载时访问路劲
wenjian = soup.find('title').get_text()#查找title标签 并提取其中的内容
os.mkdir(wenjian)#调用文件操作 在当前文件下创建文件
#查找所有的图片的标签
img_divs = soup.find_all("div", class_="bqppdiv1")

global datas # 二进制流的列表
datas = []
global names
names = [] # 对应名字的列表
global geshi
geshi = []# 对应后缀名的列表

#循环查找
for img_div in img_divs:
img_node = img_div.find("img")
if not img_node: continue

#增加到二次流的列表里
liu = img_node["data-original"]
datas.append(liu)
# 增加到格式的列表里
num=len(liu)
geshi.append(liu[num-4:])
#增加到对应的文件名的列表里
names.append(img_node["alt"])
#调用下载的类 并将它的返回 作为参数 再调用分析和生成列表的类


#获取一下的长度



def gif():
#调用获取网页源码和 再对源码处理成有图片名称 格式 二进制流的列表 两个类


parse_single_html(download_all_htmls(entry1.get()))
#提前知道一下我需要下载多少张照片 也就是循环多次
lens = len(datas)
for i in range(lens):

reponse = requests.get(datas[i])
# 获取网络图片二进制流
img_content = reponse.content

# 将二进制流保存到一个图片文件中就可以了
with open("./"+wenjian+"/"+names[i]+geshi[i], "wb") as f:
f.write(img_content)

#打开链接
def open_url(event):
webbrowser.open("https://www.fabiaoqing.com", new=0)




#窗体的声明
def window():
# 生成root主窗口
root=Tk(className = "表情包下载器")
# 指定主框体大小
root.geometry('620x440')
# 框体大小可调性,分别表示x,y方向的可变性;
root.resizable(0, 0)
# 生成提示标签
labe1=Label(root,text = '欢迎来到表情包下载器',fg = "Olive",font = "宋体 -25 bold",background = "LightPink", height=2)
labe1.pack()
labe2=Label(root,text = '表情包来源:https://www.fabiaoqing.com',fg = "Olive",font = "宋体 -25 bold",background = "LightPink")
labe2.pack()
button2 = Button(root,text = '打开表情包主页',fg = "red",font = '宋体 -30 bold',width=20,command = lambda : open_url("<Button-1>"))#command = lambda :
button2.pack()
#button2.bind("<Button-1>", open_url)

labe3=Label(root,text = '请在先在下方输入需要的表情包的地址',fg = "Olive",font = "宋体 -25 bold",background = "LightPink")
labe3.place(x=90,y=200)

#单行文本框让用户输入表情包ID
# 声明为全局变量可以访问
global entry1
entry1=Entry(root,fg = "red",font = '宋体 -30 bold',width=10)
entry1.place(x=230, y=230)
#单击按钮后调用下载表情包的类并开始下载
button2 = Button(root,text = '下载文件请点击',fg = "red",font = '宋体 -30 bold',command = lambda :gif(),width=20, height=2)#command = lambda :
button2.place(x=140, y=300)

# 进入消息循环(必需组件)
root.mainloop()


window()#整个程序的调用!

程序封装成.exe方法
需要用 pip 安装一个 pyinstaller 模块
【详细安装可自查百度】
第一步准备一个 .ico格式 的图标 和.py 文件
复制你准备好的两个文件放入自己安装的 pyinstaller的目录中;

第二步
复制你的 pyinstaller.exe的路径
在win+r 输入 cmd
在cmd命令窗口输入 cd 右键粘贴你的路径 回车

第三步(注图标必须为ico格式)
输入你的命令
pyinstaller -F py文件 -i 图标
第四步
pyinstaller的同级目录中会有个dist的文件夹
打开里面就有生成的exe文件


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!