Hello,大家好,我是wangzirui32,最近我开了个新的系列,是“Python网络爬虫”分类,还请大家多多支持!
今天,我们来学习如何爬取并下载个性化签名图片,开始学习吧!
1. 分析网页
1.1 网址
这里要爬取的网站为www.uustv.com,这是一个可以制作个性化签名的网站。
1.2 开始分析
如图:
字体大小标签和字体风格标签里有什么呢?
那么生成的图片链接在哪儿?
2. 编写代码
2.1 爬取代码
有了这些信息,我们可以构建一个Python字典:
data = {
"word": "小明",
"sizes": "60",
"fonts": "1.ttf", # 艺术体风格
"fontcolor": "#000000",
}
ok,创建一个demo.py文件,开始编写代码:
# 导入所需模块
from requests import get, post
from bs4 import BeautifulSoup as bs
# url定义
url = "http://www.uustv.com/"
name = input("请输入你的名字:")
# 构建表单字典
data = {
"word": name,
"sizes": "60",
"fonts": "1.ttf",
"fontcolor": "#000000",
}
# 发起post请求 并传入数据
response = post(url, data=data)
# 设置文本编码为UTF-8
response.encoding = "UTF-8"
# 解析
soup = bs(response.text, "html.parser")
# 找到在class属性为tu的div标签 再里面的img标签
img = soup.find("div", {
"class": "tu"}).find("img")
# 获取src属性 并与网址拼接
img_url = url + img.get("src")
# 下载图片
img_response = get(img_url)
# 对图片进行保存 wb指以二进制存入文件
with open("pic.gif", "wb") as p_f:
# 由于图片是二进制数据 所以是写入content属性 而不是text
p_f.write(img_response.content)
2.2 GUI代码
首先,我们要修改一下demo.py文件的代码,修改为:
from requests import get, post
from bs4 import BeautifulSoup as bs
import tkinter.messagebox as messagebox
# 保存路径 和 生成的名字
def get_pic(path, name):
url = "http://www.uustv.com/"
data = {
"word": name,
"sizes": "60",
"fonts": "1.ttf",
"fontcolor": "#000000",
}
response = post(url, data=data)
response.encoding = "UTF-8"
soup = bs(response.text, "html.parser")
img = soup.find("div", {
"class": "tu"}).find("img")
img_url = url + img.get("src")
img_response = get(img_url)
with open(path + "/pic.gif", "wb") as p_f:
p_f.write(img_response.content)
messagebox.askokcancel("提示", "生成完毕!")
然后,创建文件GUI.py,输入代码:
import tkinter as tk
import tkinter.filedialog as filedialog
from demo import get_pic
# 获取保存的路径
def get_save_path():
FolderPath = filedialog.askdirectory()
global path
path.set(FolderPath)
label_font = ("黑体", 11)
root = tk.Tk()
root.geometry("400x400")
root.title("制作个性化签名")
label_1 = tk.Label(root, text="请输入你的名字:", font=label_font)
label_1.grid(sticky="NW")
name_text = tk.Entry(root)
name_text.grid(sticky="NW")
label_2 = tk.Label(root, text="请选择保存路径:", font=label_font)
label_2.grid(sticky="NW")
path = tk.StringVar()
path.set("C:/")
save_path_text = tk.Entry(root, text=path, width=50)
save_path_text.grid(sticky="NW")
save_path_button = tk.Button(root, text="浏览...", command=get_save_path)
save_path_button.grid(sticky="NW")
save_button = tk.Button(root, text="生成签名",
command=lambda: get_pic(path.get(), name_text.get()))
save_button.grid(sticky="NW")
root.mainloop()
这样就ok了!
好了,今天的课程就到这里了,喜欢的可以点赞收藏,拜拜!