大数跨境
0
0

Mind+ python爬虫、GUI、pillow制作一个个性签名

Mind+ python爬虫、GUI、pillow制作一个个性签名 蘑菇云创造
2021-03-30
2
导读:利用GUI的工具制作一个弹窗窗口,当输入人名时,能够在本地文件中生成个性签名。

点击"蘑菇云创造" 关注我们


mind+更新到了1.7版本后,新增了python模式,在论坛中也看到了很多大神发的帖子,今天我也来试试!我选择用使用爬虫、tkinter(GUI工具)和图像处理(pillow)制作一个个性签名的程序。


1

功能介绍


利用GUI(图形用户界面)的工具制作一个弹窗窗口,当输入人名时,能够自动跳转到相应的网址爬出自己所要的数据,再结合图像处理工具pillow进行图像处理,最终在本地文件中生成个性签名。


2

知识储备


1、爬虫:“爬虫”是一种形象的说法。我们把互联网比喻成一张大网,爬虫是一个程序或脚本在这种大网上爬走。碰到虫子(资源),若是所需的资源就获取或下载下来。这个资源通常是网页、文件等等。可以通过该资源里面的url链接,顺藤摸瓜继续爬取这些链接的资源。
2、tkinter:tkinter也叫tk接口,是tk图形用户界面工具包标准的python接口。tk是一个轻量级的跨平台图像用户界面(GUI)的开发工具。
3、pillow:pillow是一个基础的图形处理库。我们可以使用pillow库来进行图像读取与存储、图像的剪切合并、图像格式的转换等操作。
4、正则表达式:简称RE,又称规则表达式,它不是某个编程语言所特有的,是计算机科学的一个概念,通常被用来检索和替换符合某些规则的文本。


3

软件准备


1、mind+ 1.7及以上版本

2、打开mind+,选择python模式并新建一个“个性签名.py”的文件



3、双击新建的文件,即可打开文件进行程序的编写



4、安装需要的库文件,pillow库和requests库



4

功能实现


一、利用GUI(图形用户界面)的工具制作一个弹窗窗口


1、制作图像界面,输入以下代码

 

复制代码 隐藏代码from tkinter import *#创建窗口rview=Tk()#标题rview.title("个性签名")#窗口大小 长高用小写x隔开rview.geometry("600x300")
#消息循环 显示窗口rview.mainloop()


2、点击运行程序



3、运行效果



4、按照自己的功能需求完善修改和增加代码


复制代码 隐藏代码from tkinter import *#创建窗口rview=Tk()#标题rview.title("个性签名")#窗口大小 长高用小写x隔开#rview.geometry("600x300")#窗口基于屏幕的坐标 +x轴+y轴rview.geometry("+500+200")#创建lab标签labelx=Label(rview,text="签名",fg="red",font=("微软雅黑",30))#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐labelx.grid(row=0,column=0)#创建输入框entryx=Entry(rview,font=("微软雅黑",20))#显示输入框entryx.grid(row=0,column=1)#消息循环 显示窗口rview.mainloop()


5、运行程序,得到了我想要的效果(也可以按照自己的想法进行修改)



6、接下来增加按钮模块功能代码,在这里写了一个butonck函数,用来存放点击按钮时做出的一些反应,并调用它让它显示出来。


复制代码 隐藏代码from tkinter import *from tkinter import messageboxdef butonck():#改变lab颜色    labelx["fg"]="blue"#获取输入框值    textx=entryx.get()#去掉字符串前后空格    textx=textx.strip()if textx=='':#弹出提示框      messagebox.showinfo("提示","输入不可为空")
#创建窗口rview=Tk()#标题rview.title("个性签名")#窗口大小 长高用小写x隔开#rview.geometry("600x300")#窗口基于屏幕的坐标 +x轴+y轴rview.geometry("+500+200")#创建lab标签labelx=Label(rview,text="签名",fg="red",font=("微软雅黑",30))#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐labelx.grid(row=0,column=0)#创建输入框entryx=Entry(rview,font=("微软雅黑",20))#显示输入框entryx.grid(row=0,column=1)
#创建按钮buttonx=Button(rview,text="确定",font=("微软雅黑",30),command=butonck)#显示按钮buttonx.grid(row=1,column=2)
#消息循环 显示窗口rview.mainloop()


7、运行效果

当输入为空时,弹出另一个窗口提示输入不能为空



当输入有内容时,则lab标签名字由红变蓝



哇!!!好不容易啊,终于做成了我想要的输入框。接下来我就要实现点击按钮时能够利用request爬到网站的数据了。找了一下相应的网址,找到了一个符合我需求的网址:http://www.uustv.com/



接下来进行下一步!!! 


二、利用爬虫获取网站数据


1、利用requests库,以post请求方式,发送http网络请求


复制代码 隐藏代码import requestsdata={'mind':'hello'}  #表单参数#对需要爬取的网页发送请求response=requests.post('http://www.uustv.com/',data=data)#以文本形式打印网页源码print(response.text)


2、点击运行程序,可以从终端看到我们爬到的数据



3、用浏览器打开我们需要爬的网站(建议使用谷歌浏览器),打开开发者工具


打开后



此时你仔细去对比和我们爬出来的数据是一致的。


4、通过网站爬出自己想要的内容,这里我们需要的内容是,生成个性签名的部分。



5、找到我们需要爬出的数据


复制代码 隐藏代码import requestsimport re  #正则表达式#网页中所需要输入的汉字及格式datax={"word":"hello","sizes":60,"fonts":"lfc.ttf","fontcolor":"#000000"    }  #对需要爬取的网页发送请求response=requests.post('http://www.uustv.com/',data=datax)#防止中文显示乱码response.encoding="utf-8"#获取网站源码htmlx=response.text#选择需要的源码段zz='<div>.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容


三、通过图像处理(pillow)库处理图像并生成本地文件


1、编写程序生成本地文件


 复制代码 隐藏代码import requests#导入requests库import re  #正则表达式from PIL import Image,ImageTk#导入pillow库#网页中所需要输入的汉字及格式datax={"word":"hello","sizes":60,"fonts":"lfc.ttf","fontcolor":"#000000"    }  #对需要爬取的网页发送请求response=requests.post('http://www.uustv.com/',data=datax)#防止中文显示乱码response.encoding="utf-8"#获取网站源码htmlx=response.text#选择需要的源码段zz='<div>.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容#获取网页图片地址,利用正则表达式的检索功能imagex=re.findall(zz,htmlx)#获取图片数据内容imagedatax=requests.get("http://www.uustv.com/"+imagex[0]).content#打开本地文件ff=open('{}.gif'.format("hello"),"wb")#将获取到的图片及内容写入本地文件ff.write(imagedatax)


2、点击运行程序,之后点击刷新文件夹按键



当然此时我们可以进行个性签名的查看


这里我们还可以把输入的"hello"改成其它文字,你可以试试哦!!!(但是注意:代码中所涉及到的内容需全改,否则代码会报错)


四、把所有功能结合起来


1、我们跳转到网页进行数据的爬取,其实是当我们点击“确认”按钮时进行的操作,所以我们把图像处理(pillow)库处理图像并生成本地文件的代码段放到之前写的butonck函数就好了。之前我们只进行了是否为空的判断,所以加入else判断,也就是当输入的内容不为空时就能实现个性签名的功能。所以代码如下:


复制代码 隐藏代码def butonck():#改变lab颜色    labelx["fg"]="blue"#获取输入框值    textx=entryx.get()#去掉字符串前后空格    textx=textx.strip()if textx=='':#弹出提示框      messagebox.showinfo("提示","输入不可为空")else:#网页中所需要输入的汉字及格式      datax={"word":"hello","sizes":60,"fonts":"lfc.ttf","fontcolor":"#000000"    }  #对需要爬取的网页发送请求      response=requests.post('http://www.uustv.com/',data=datax)#防止中文显示乱码      response.encoding="utf-8"#获取网站源码      htmlx=response.text#选择需要的源码段      zz='<div class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容#获取网页图片地址      imagex=re.findall(zz,htmlx)#获取图片数据      imagedatax=requests.get("http://www.uustv.com/"+imagex[0]).content#打开本地文件      ff=open('{}.gif'.format("hello"),"wb")#将获取到的数据写入本地文件      ff.write(imagedatax)


2、以上功能是静态获取输入的内容,显示我们需要动态获取,所以需要把代码中输入的内容"hello"改为前面获取框的值,也就是textx。所以代码修改为:


 复制代码 隐藏代码def butonck():#改变lab颜色    labelx["fg"]="blue"#获取输入框值    textx=entryx.get()#去掉字符串前后空格    textx=textx.strip()if textx=='':#弹出提示框      messagebox.showinfo("提示","输入不可为空")else:#网页中所需要输入的汉字及格式      datax={"word":textx,"sizes":60,"fonts":"lfc.ttf","fontcolor":"#000000"    }  #对需要爬取的网页发送请求      response=requests.post('http://www.uustv.com/',data=datax)#防止中文显示乱码      response.encoding="utf-8"#获取网站源码      htmlx=response.text#选择需要的源码段      zz='<div>.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容#获取网页图片地址      imagex=re.findall(zz,htmlx)#获取图片数据      imagedatax=requests.get("http://www.uustv.com/"+imagex[0]).content#打开本地文件      ff=open('{}.gif'.format(textx),"wb")#将获取到的数据写入本地文件      ff.write(imagedatax)


3、最后我们再利用tkinter和pillow的功能在界面显示出我们的个性签名 


复制代码 隐藏代码#利用tk和pillow的功能在界面显示获取的内容bmx=ImageTk.PhotoImage(file='{}.gif'.format(textx))lab2=Label(rview,image=bmx)lab2.bm=bmxlab2.grid(row=2,columnspan=2)


4、完整代码如下


复制代码 隐藏代码
from tkinter import *from tkinter import messageboximport requests#导入requests库import re #正则表达式from PIL import Image,ImageTk#导入pillow库def butonck():#改变lab颜色 labelx["fg"]="blue"#获取输入框值 textx=entryx.get()#去掉字符串前后空格 textx=textx.strip()if textx=='':#弹出提示框 messagebox.showinfo("提示","输入不可为空")else:#网页中所需要输入的汉字及格式 datax={"word":textx,"sizes":60,"fonts":"lfc.ttf","fontcolor":"#000000" } #对需要爬取的网页发送请求 response=requests.post('http://www.uustv.com/',data=datax)#防止中文显示乱码 response.encoding="utf-8"#获取网站源码 htmlx=response.text#选择需要的源码段 zz='<div>.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容#获取网页图片地址 imagex=re.findall(zz,htmlx)#获取图片数据 imagedatax=requests.get("http://www.uustv.com/"+imagex[0]).content#打开本地文件 ff=open('{}.gif'.format(textx),"wb")#将获取到的数据写入本地文件 ff.write(imagedatax)
#利用tk和pillow的功能在界面显示获取的内容 bmx=ImageTk.PhotoImage(file='{}.gif'.format(textx)) lab2=Label(rview,image=bmx) lab2.bm=bmx lab2.grid(row=2,columnspan=2)
#创建窗口rview=Tk()#标题rview.title("个性签名")#窗口大小 长高用小写x隔开#rview.geometry("600x300")#窗口基于屏幕的坐标 +x轴+y轴rview.geometry("+500+200")#创建lab标签labelx=Label(rview,text="签名",fg="red",font=("微软雅黑",30))#显示lab标签 网格布局 sticky=W #左对齐 E为右对齐 默认为中间对齐labelx.grid(row=0,column=0)#创建输入框entryx=Entry(rview,font=("微软雅黑",20))#显示输入框entryx.grid(row=0,column=1)
#创建按钮buttonx=Button(rview,text="确定",font=("微软雅黑",30),command=butonck)#显示按钮buttonx.grid(row=1,column=2)
#消息循环 显示窗口rview.mainloop()


5、运行效果



这样我们的项目就完成了,现在你可以尝试爬一下其它网页的内容了!

更多基础教程可查看:

https://mindplus.dfrobot.com.cn/Python


本文来自:DF创客社区
作者:DFByw_XnB4X
微信编辑:千千

蘑菇云创造

微信号 : mgystem

扫码关注,了解更多


推荐阅读:



点击“阅读原文”,了解更多!

【声明】内容源于网络
0
0
蘑菇云创造
蘑菇云是DFRobot旗下专注于AI人工智能、创客、STEAM、劳动教育的科技创新教育品牌;以为中国培养下一代科技创新人才为使命,为学校提供k12全龄段科技创新教育解决方案。
内容 969
粉丝 0
蘑菇云创造 蘑菇云是DFRobot旗下专注于AI人工智能、创客、STEAM、劳动教育的科技创新教育品牌;以为中国培养下一代科技创新人才为使命,为学校提供k12全龄段科技创新教育解决方案。
总阅读2.0k
粉丝0
内容969