6422浏览
查看: 6422|回复: 4

[项目分享] 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”的文件

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

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

功能实现

一、利用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 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、运行效果
当输入为空时,弹出另一个窗口提示输入不能为空

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

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

接下来进行下一步!!!  

二、利用爬虫获取网站数据
1、利用requests库,以post请求方式,发送http网络请求

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

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

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

打开后

此时你仔细去对比和我们爬出来的数据是一致的。
4、通过网站爬出自己想要的内容,这里我们需要的内容是,生成个性签名的部分。

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

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、编写程序生成本地文件

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[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 class="tu">.*?<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=bmx
      lab2.grid(row=2,columnspan=2)

4、完整代码如下


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[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


IvanDMido  初级技师

发表于 2021-3-25 17:25:08

回复

使用道具 举报

Ski  初级技匠

发表于 2021-3-25 17:43:04

回复

使用道具 举报

转瞬  初级技师 来自手机

发表于 2021-3-25 18:56:13

DFByw_XnB4X 发表于 2021-3-25 17:20
[md]#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
回复

使用道具 举报

RRoy  超级版主

发表于 2021-3-29 11:18:44

感觉很不错,有机会试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail