原理
利用个性签名网址生成个性签名图片,把生成的个性签名图片爬取出来,放置在GUI界面上,然后再添加一些按钮,输入框之类的
http://www.uustv.com/
爬取图片
在网页上按F12 打开开发者工具,点击左上角箭头,然后点击我们想要的图片,就会出现图片的连接
但是我们爬取就只能爬取图片的连接,缺少域名,不是完整的网址,用鼠标指着这个图片的链接会出现完整网址,(这里没法截图),但是这个完整网址就是页面的网址加上这个图片的链接,即
两个连起来,所以我们就把他连起来就行了
所以我们现在开始爬取网页源代码,导入request,因为网页本身的请求方式为post,所以我们也用post爬取,post需要我们输入一些内容才能响应,从network页面可以看到,需要的请求方式和输入的内容
往下翻看到数据
因此我们写代码并打印出爬取的内容
import requests
url='http://www.uustv.com/'
data={
'word': '特朗普',
'sizes': '60',
'fonts': '1.ttf',
'fontcolor': '#000000'
}
#爬取网页源代码
req=requests.post(url,data=data)
#爬取的网页内容使用网页本身的解码方式,防止出现乱码
req.encoding=req.apparent_encoding
print(req.text)
利用正则表达式把图片链接爬取出来
#正则表达式
import re
reg=re.compile('<img src="(.*?)">')
res=re.findall(reg, req.text)
print(res)
得到这个链接之后可以设置url=网址+链接
result=url+res[0]
print(result)
进入这个网址就是我们需要的网址
把该url的图片保存到本地
#urlretrieve将url指向的对象保存到本地
from urllib.request import urlretrieve
path=r'./个性签名.gif'
urlretrieve(result,path)
到此为止,爬取图像的函数就写完了
import requests
import re
from urllib.request import urlretrieve
def get_image():
url='http://www.uustv.com/'
data={
'word': '特朗普',
'sizes': '60',
'fonts': '1.ttf',
'fontcolor': '#000000'
}
#爬取网页源代码
req=requests.post(url,data=data)
#爬取的网页内容使用网页本身的解码方式,防止出现乱码
req.encoding=req.apparent_encoding
#print(req.text)
#正则表达式
reg=re.compile('<img src="(.*?)"/>')
res=re.findall(reg, req.text)
#print(res)
result=url+res[0]
#print(result)
#urlretrieve将url指向的对象保存到本地
path=r'./个性签名.gif'
urlretrieve(result,path)
制作GUI界面
python3.x使用tkinter
import tkinter as tk
#Tk是小写的k,root出现一次接着消失
root=tk.Tk()
#让root循环出现
root.mainloop()
修改大小和标题
#修改大小,里面不是乘号,而是x
root.geometry('600x310')
#设置标题
#root.title('签名软件测试')
设置布局
#把标签1放在root第0行第0列上,内容为“签名”,设置字体,大小,颜色
l1=tk.Label(root,text='签名',font=('华文行楷',20),fg='blue')
l1.grid(row=0,column=0)
加入输入框
我们加入输入框之后,我们就应该把原来函数中的data数据word改变为从输入框中获取
即
data={
'word': e1.get(),
'sizes': '60',
'fonts': '1.ttf',
'fontcolor': '#000000'
}
下面继续设计布局,添加按钮
#把按钮放在root的第1行第0列上,设置字体,大小,内容
b1=tk.Button(root,font=('微软雅黑,20'),text='设计签名')
b1.grid(row=1,column=0)
设置点击按钮事件
点击按钮后应该会出现设计的签名图片,即调用get_image()函数,所以我们应该在原函数(get_image())中加上显示图片的代码
先把下面修改成点击按钮,调用get_image()函数
b1=tk.Button(root,font=('微软雅黑,20'),text='设计签名',command=get_image)
在get_image()函数中加入以下代码
#把文件放到root上
from PIL import ImageTk
bm=ImageTk.PhotoImage(file=path)
l2=tk.Label(root,image=bm)
l2.bm=bm
l2.grid(row=2,columnspan=2)#colummnspan=2是占两列的意思
最后加入很多签名字体
加入一个列表框
#加入列表框
comboxlist=ttk.Combobox(root,font=('微软雅黑',20),width=2)
#直接把可能出现的字体从网页的源代码上复制下来就行
comboxlist['values']=('zql.ttf','8.ttf','6.ttf','bzcs.ttf','lfc.ttf','2.ttf','3.ttf','yqk.ttf')
comboxlist.grid(row=0,column=3)
加入列表框后,我们需要把get_image()函数中data中的fonts改为从列表框中获取
data={
'word': e1.get(),
'sizes': '60',
'fonts': comboxlist.get(),
'fontcolor': '#000000'
}
最终得到
全部代码
import requests
import re
from urllib.request import urlretrieve
import tkinter as tk
from PIL import ImageTk
from tkinter import ttk
def get_image():
url='http://www.uustv.com/'
data={
'word': e1.get(),
'sizes': '60',
'fonts': comboxlist.get(),
'fontcolor': '#000000'
}
#爬取网页源代码
req=requests.post(url,data=data)
#爬取的网页内容使用网页本身的解码方式,防止出现乱码
req.encoding=req.apparent_encoding
#print(req.text)
#正则表达式
reg=re.compile('<img src="(.*?)"/>')
res=re.findall(reg, req.text)
#print(res)
result=url+res[0]
#print(result)
#urlretrieve将url指向的对象保存到本地
path=r'./个性签名.gif'
urlretrieve(result,path)
#把文件放到root上
bm=ImageTk.PhotoImage(file=path)
l2=tk.Label(root,image=bm)
l2.bm=bm
l2.grid(row=2,columnspan=2)#colummnspan=2是占两列的意思
#Tk是小写的k,root出现一次接着消失
root=tk.Tk()
#修改大小,里面不是乘号,而是x
root.geometry('600x310')
#设置标题
root.title('签名软件测试')
#把标签1放在root第0行第0列上,内容为“签名”,设置字体,大小,颜色
l1=tk.Label(root,text='签名',font=('华文行楷',20),fg='blue')
l1.grid(row=0,column=0)
#把输入框放在root的第0行第1列上,设置字体,大小,宽度,输入框默认内容为空
e1=tk.Entry(root,text='',font=('微软雅黑',20),width=25)
e1.grid(row=0,column=1)
#把按钮放在root的第1行第0列上,设置字体,大小,内容
b1=tk.Button(root,font=('微软雅黑,20'),text='设计签名',command=get_image)
b1.grid(row=1,column=0)
#加入列表框
comboxlist=ttk.Combobox(root,font=('微软雅黑',20),width=2)
#直接把可能出现的字体从网页的源代码上复制下来就行
comboxlist['values']=('zql.ttf','8.ttf','6.ttf','bzcs.ttf','lfc.ttf','2.ttf','3.ttf','yqk.ttf')
comboxlist.grid(row=0,column=3)
#让root循环出现
root.mainloop()