点击"蘑菇云创造" 关注我们
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=bmxlab2.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
蘑菇云创造
微信号 : mgystem
扫码关注,了解更多
推荐阅读:
点击“阅读原文”,了解更多!

