Mind+ python爬虫、GUI、pillow制作一个个性签名
本帖最后由 DFByw_XnB4X 于 2021-3-29 15:53 编辑#Mind+ python爬虫、GUI、pillow制作一个个性签名
mind+更新到了1.7版本后,新增了python模式,在论坛中也看到了很多大神发的帖子,今天我也来试试!我选择用使用爬虫、tkinter(GUI工具)和图像处理(pillow)制作一个个性签名的程序。
###功能介绍
利用GUI(图形用户界面)的工具制作一个弹窗窗口,当输入人名时,能够自动跳转到相应的网址爬出自己所要的数据,再结合图像处理工具pillow进行图像处理,最终在本地文件中生成个性签名。
###知识储备
1、**爬虫**:“爬虫”是一种形象的说法。我们把互联网比喻成一张大网,爬虫是一个程序或脚本在这种大网上爬走。碰到虫子(资源),若是所需的资源就获取或下载下来。这个资源通常是网页、文件等等。可以通过该资源里面的url链接,顺藤摸瓜继续爬取这些链接的资源。
2、**tkinter**:tkinter也叫tk接口,是tk图形用户界面工具包标准的python接口。tk是一个轻量级的跨平台图像用户界面(GUI)的开发工具。
3、**pillow**:pillow是一个基础的图形处理库。我们可以使用pillow库来进行图像读取与存储、图像的剪切合并、图像格式的转换等操作。
4、**正则表达式**:简称RE,又称规则表达式,它不是某个编程语言所特有的,是计算机科学的一个概念,通常被用来检索和替换符合某些规则的文本。
###软件准备
1、mind+ 1.7及以上版本
2、打开mind+,选择python模式并新建一个“个性签名.py”的文件
![](https://img.dfrobot.com.cn/wiki/none/b6508fe9decdad47685ce1b75fb49eb3.png)
3、双击新建的文件,即可打开文件进行程序的编写
![](https://img.dfrobot.com.cn/wiki/none/9789425ca1d276e06779482c574db503.png)
4、安装需要的库文件,pillow库和requests库
![](https://img.dfrobot.com.cn/wiki/none/ee85ef0dcc29b154a00350db9ffda5e8.png)
![](https://img.dfrobot.com.cn/wiki/none/1eef564c73804295af55793c979e0a3d.png)
###功能实现
一、利用GUI(图形用户界面)的工具制作一个弹窗窗口
1、制作图像界面,输入以下代码
```python
from tkinter import *
#创建窗口
rview=Tk()
#标题
rview.title("个性签名")
#窗口大小 长高用小写x隔开
rview.geometry("600x300")
#消息循环 显示窗口
rview.mainloop()
```
2、点击运行程序
![](https://img.dfrobot.com.cn/wiki/none/f2e32f9c1a997af18d3ad808dd03747e.png)
3、运行效果
![](https://img.dfrobot.com.cn/wiki/none/df060099eed36059d9604144a9b4d135.png)
4、按照自己的功能需求完善修改和增加代码
```python
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、运行程序,得到了我想要的效果(也可以按照自己的想法进行修改)
![](https://img.dfrobot.com.cn/wiki/none/8ba2c989c2b654294bb570c32263c015.png)
6、接下来增加按钮模块功能代码,在这里写了一个butonck函数,用来存放点击按钮时做出的一些反应,并调用它让它显示出来。
```python
from tkinter import *
from tkinter import messagebox
def 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、运行效果
当输入为空时,弹出另一个窗口提示输入不能为空
![](https://img.dfrobot.com.cn/wiki/none/6fed1e0ef97f6a38afb6459f2f6790fd.png)
当输入有内容时,则lab标签名字由红变蓝
![](https://img.dfrobot.com.cn/wiki/none/354517ee328538060971c81967302b06.png)
哇!!!好不容易啊,终于做成了我想要的输入框。接下来我就要实现点击按钮时能够利用request爬到网站的数据了。找了一下相应的网址,找到了一个符合我需求的网址:http://www.uustv.com/
![](https://img.dfrobot.com.cn/wiki/none/abb32d7ad66602a954edd5615473c03a.png)
接下来进行下一步!!!
二、利用爬虫获取网站数据
1、利用requests库,以post请求方式,发送http网络请求
```python
import requests
data={'mind':'hello'}#表单参数
#对需要爬取的网页发送请求
response=requests.post('http://www.uustv.com/',data=data)
#以文本形式打印网页源码
print(response.text)
```
2、点击运行程序,可以从终端看到我们爬到的数据
![](https://img.dfrobot.com.cn/wiki/none/4365d6f492797f79364cd4b574d29a65.png)
3、用浏览器打开我们需要爬的网站(建议使用谷歌浏览器),打开开发者工具
![](https://img.dfrobot.com.cn/wiki/none/760564beb4aadac34754d4ec3eba7842.png)
打开后
![](https://img.dfrobot.com.cn/wiki/none/6b774414322c2bc35d984f26d4f2eb7e.png)
此时你仔细去对比和我们爬出来的数据是一致的。
4、通过网站爬出自己想要的内容,这里我们需要的内容是,生成个性签名的部分。
![](https://img.dfrobot.com.cn/wiki/none/650a875a9f947f98e21ba5e7ed9910a6.png)
5、找到我们需要爬出的数据
```python
import requests
import 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 class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容
```
三、通过图像处理(pillow)库处理图像并生成本地文件
1、编写程序生成本地文件
```python
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 class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容
#获取网页图片地址,利用正则表达式的检索功能
imagex=re.findall(zz,htmlx)
#获取图片数据内容
imagedatax=requests.get("http://www.uustv.com/"+imagex).content
#打开本地文件
ff=open('{}.gif'.format("hello"),"wb")
#将获取到的图片及内容写入本地文件
ff.write(imagedatax)
```
2、点击运行程序,之后点击刷新文件夹按键
![](https://img.dfrobot.com.cn/wiki/none/fecbc83add48e1a9e433d3150b966410.png)
当然此时我们可以进行个性签名的查看
![](https://img.dfrobot.com.cn/wiki/none/db1a44b2a7414b2dd105a2a091ec858a.png)
![](https://img.dfrobot.com.cn/wiki/none/0de6cb30d6e66bcd227ce2f97a84f271.png)
这里我们还可以把输入的"hello"改成其它文字,你可以试试哦!!!(**但是注意**:代码中所涉及到的内容需全改,否则代码会报错)
四、把所有功能结合起来
1、我们跳转到网页进行数据的爬取,其实是当我们点击“确认”按钮时进行的操作,所以我们把图像处理(pillow)库处理图像并生成本地文件的代码段放到之前写的butonck函数就好了。之前我们只进行了是否为空的判断,所以加入else判断,也就是当输入的内容不为空时就能实现个性签名的功能。所以代码如下
```python
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).content
#打开本地文件
ff=open('{}.gif'.format("hello"),"wb")
#将获取到的数据写入本地文件
ff.write(imagedatax)
```
2、以上功能是静态获取输入的内容,显示我们需要动态获取,所以需要把代码中输入的内容"hello"改为前面获取框的值,也就是textx。所以代码修改为
```python
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 class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容
#获取网页图片地址
imagex=re.findall(zz,htmlx)
#获取图片数据
imagedatax=requests.get("http://www.uustv.com/"+imagex).content
#打开本地文件
ff=open('{}.gif'.format(textx),"wb")
#将获取到的数据写入本地文件
ff.write(imagedatax)
```
3、最后我们再利用tkinter和pillow的功能在界面显示出我们的个性签名
```python
#利用tk和pillow的功能在界面显示获取的内容
bmx=ImageTk.PhotoImage(file='{}.gif'.format(textx))
lab2=Label(rview,image=bmx)
lab2.bm=bmx
lab2.grid(row=2,columnspan=2)
```
4、完整代码如下
```python
from tkinter import *
from tkinter import messagebox
import 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 class="tu">.*?<img src="(.*?)"/></div>'#括号里的.*?表示要取的值,这种方式可以获取动态数据,当输入的内容不同时,会自动获取不同的内容
#获取网页图片地址
imagex=re.findall(zz,htmlx)
#获取图片数据
imagedatax=requests.get("http://www.uustv.com/"+imagex).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://img.dfrobot.com.cn/wiki/none/c4d85428c3298904b64770f49d3be5f0.png)
这样我们的项目就完成了,现在你可以尝试爬一下其它网页的内容了!
更多基础教程可查看:https://mindplus.dfrobot.com.cn/Python
{:6_209:}{:6_209:}{:6_209:} DFByw_XnB4X 发表于 2021-3-25 17:20
#Mind+ python爬虫、GUI、pillow制作一个个性签名
mind+更新到了1.7版本后,新增了python模式,在论坛 ...
例子很不错,学到不少知识,感谢分享!我觉得用字体库直接合成也很不错。借楼宣传一下【Mind+ python实现田字格汉字和拼音,共计3984个汉字 - DF创客社区 - 分享创造的喜悦 - 手机版 - Powered by Discuz!】https://mc.dfrobot.com.cn/thread-308876-1-1.html 感觉很不错,有机会试试
页:
[1]