大家新年快乐。最近春节在家也无聊,用Python设计一个小的对联软件!

其中运用到tkinter模块:

  • tkinter是Python下面向tk的图形界面接口库,可以方便地进行图形界面设计和交互操作编程。可以应用在Windows和Macintosh系统里,实现本地窗口风格。

先看下我们的软件效果图:

  • 首先,程序的界面设计还是利用tkinter来进行设计。
  • 通过tkinter的Entry类来输入我们的上联,然后通过button按钮,来启动程序进行设计。
  • button键之所以能够完成后续的运行,是因为其绑定了我们的后续的操作函数(也就是代码中的get_xialian函数)。
  • 通过绑定的函数实现了爬虫的抓取和对联的保存。

界面设计代码如下:
if __name__ == '__main__':

root = Tk()
root.title("对联设计")
root.geometry("1200x500")
root.geometry("+100+150")# 做成背景的装饰
pic1 = Image.open('1.png').resize((1200, 500))#加载图片并调整大小至窗口大小
pic = ImageTk.PhotoImage(pic1)
render = Label(root, image=pic, compound=tk.CENTER, justify=tk.LEFT)
render.place(x=0, y=0)#标签 and 输入框
label = Label(root, text='上联(10字以内)', font=('微软雅黑', 20), fg='black')
label.grid(row=0,column=0,sticky=W)
entry = Entry(root, font=('宋体', 25),width = 15)
entry.grid(row=0, column=1,sticky=W)#按钮
button = Button(root,text='设计下联', font=('微软雅黑', 20), command=get_xialian)
button.grid(row=1, column=0, sticky=W,pady=10)root.mainloop()

界面设计完成了,而且绑定的函数也已经确定,接下来就是如何利用绑定的函数,来实现我们的后续操作,也就是爬虫抓取和保存。
首先对网页的分析,打开对联设计网页,并进入开发者模式,可以很轻松的找到我们需要的目标,如下图所示:
查看其请求的url,如下所示:

http://mduilian.388g.com/c.php?in=%E6%98%A5%E9%A3%8E%E9%80%81%E6%9A%96&len=0000&time=Thu%20Jan%2031%202019%2018:23:16%20GMT&timestamp=1548930196082

这个url非常的复杂,需要我们仔细的进行分析:

  • 首先我们可以看出url有四个部分需要我们进行输入,然后细细分析发现,其in是我们输入的上联
  • time和timestamp顾名思义是时间和时间戳
  • 而len的意义是输入的字数,以0的个数来代替

有同学可能问,这哪里有时间和输入?分明都是些字母符号。这是因为这里的时间和输入都是经过url编码后的格式,我们可以通过urllib中的unquote函数来检查。稍微总结一下,上面的url比较负责,包含了url编码的输入,还有特定编码格式的时间,还有时间戳以及让人费解的len。

了解了url的结构组织,我们就可以很轻松的模拟浏览器进行访问,返回我们需要的内容。但是在后续又出现了乱码的问题,对于乱码的问题,我们将爬取到的数据采用“utf-8”编码进行解决。而针对于json库不能解析,我们采用正则表达式的方式,匹配“下联”,并将“下联”返回。

代码如下:

def Get_couplet(text):if text:patten = re.compile('''"XialianCandidates":\["(.*?)"+\]''', re.S)data2 = re.findall(patten, text)return data2else:return ["发生错误,请重新设计!"]def get_xialian():shanglian  = entry.get()xialians = Get_couplet(Get_text(shanglian))scr1 = scrolledtext.ScrolledText(root, width=10, height=10, font=("隶书", 18))#设置滚动窗口的参数scr1.place(x=10, y=150)  # 滚动文本框在页面的位置scr1.insert(END, '上联:\t\t')scr2 = scrolledtext.ScrolledText(root, width=10, height=10, font=("隶书", 18))  # 设置滚动窗口的参数scr2.place(x=1050, y=150)  # 滚动文本框在页面的位置scr2.insert(END, '下联:\n')for Xialian in xialians:xialians = Xialian.split(',')for xialian in xialians:scr1.insert(END,shanglian+'\t\n')scr2.insert(END,xialian.replace('"','')+'\n')

最后将得到的数据保存在根目录下,当对联保存完毕后,程序会弹出对话框,提醒对联已经完成,并到本地进行查看,运行效果如下图所示。

完整代码如下:

import requests
from urllib.parse import urlencode,quote,unquote
import time
import redef Get_text(shanglian):GMT_FORMAT = '%a, %b %d %Y %H:%M:%S GMT'date = time.strftime(GMT_FORMAT,time.gmtime())url = 'http://mduilian.388g.com/c.php?in={0}&len={1}&time={2}+0800%20&timestamp={3}'.format(quote(shanglian),len(shanglian)*'0',quote(date),int(time.time()))headers = {'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Mobile Safari/537.36','Referer':'http://mduilian.388g.com/','Host':'mduilian.388g.com','Cookie':'PHPSESSID=llcj5u13als5fdqm3ps3pcbp47; __jsluid=0bb3b698bd1bcfe76b1190eada3bada8; BDTUJIAID=f47eb00df7502b6e56e052efda83cc57; Hm_lvt_b0a06229d110088000f04b20c9024b7d=1548900294,1548911084,1548911171,1548911511; Hm_lpvt_b0a06229d110088000f04b20c9024b7d=1548911511; Hm_lvt_696881765bc4548d58a559b742b5b6d0=1548900295,1548911084,1548911171,1548911511; Hm_lpvt_696881765bc4548d58a559b742b5b6d0=1548911511; Hm_lvt_3c8ecbfa472e76b0340d7a701a04197e=1548900300,1548911090,1548911177,1548911517; Hm_lpvt_3c8ecbfa472e76b0340d7a701a04197e=1548911517','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Connection': 'keep-alive'}# print(url)# print(unquote(url))response = requests.get(url,headers=headers,timeout=50)response.encoding = 'utf-8'# print(response.text)return response.textdef Get_couplet(text):if text:patten = re.compile('''"XialianCandidates":\["(.*?)"+\]''', re.S)data2 = re.findall(patten, text)return data2else:return ["发生错误,请重新设计!"]def get_xialian():shanglian  = entry.get()xialians = Get_couplet(Get_text(shanglian))scr1 = scrolledtext.ScrolledText(root, width=10, height=10, font=("隶书", 18))#设置滚动窗口的参数scr1.place(x=10, y=150)  # 滚动文本框在页面的位置scr1.insert(END, '上联:\t\t')scr2 = scrolledtext.ScrolledText(root, width=10, height=10, font=("隶书", 18))  # 设置滚动窗口的参数scr2.place(x=1050, y=150)  # 滚动文本框在页面的位置scr2.insert(END, '下联:\n')for Xialian in xialians:xialians = Xialian.split(',')for xialian in xialians:scr1.insert(END,shanglian+'\t\n')scr2.insert(END,xialian.replace('"','')+'\n')from tkinter import *
import tkinter as tk
from PIL import Image, ImageTk
from tkinter import scrolledtextif __name__ == '__main__':root = Tk()root.title("LX设计")root.geometry("1200x500")root.geometry("+100+150")# 做成背景的装饰pic1 = Image.open('1.png').resize((1200, 500))#加载图片并调整大小至窗口大小pic = ImageTk.PhotoImage(pic1)render = Label(root, image=pic, compound=tk.CENTER, justify=tk.LEFT)render.place(x=0, y=0)#标签 and 输入框label = Label(root, text='上联(10字以内)', font=('微软雅黑', 20), fg='black')label.grid(row=0,column=0,sticky=W)entry = Entry(root, font=('宋体', 25),width = 15)entry.grid(row=0, column=1,sticky=W)#按钮button = Button(root,text='设计下联', font=('微软雅黑', 20), command=get_xialian)button.grid(row=1, column=0, sticky=W,pady=10)root.mainloop()

012:tkinter+爬虫设计对联软件相关推荐

  1. python关键词对联_春节在家无聊,我用Python设计了一个对联软件

    原标题:春节在家无聊,我用Python设计了一个对联软件 大家新年好!每逢过年,家家户户少不了的一项就是贴对联,但是看着年年的新春对联,内容毫无新意,兴致也就减了大半.既然是玩Python的,最近春节 ...

  2. 微软对联软件遭质疑 网友称恶搞中国文化

    上联:月落乌啼霜满天:下联:风吹雁过雨连宵.把唐朝诗人张继的一句诗作为上联而对出下联,你是不是觉得这样的对联还算不错呢?不过这个下联并不是人对出来的,而是电脑的杰作.继写诗软件.写小说软件陆续在网上发 ...

  3. 推荐一个Tkinter GUI 设计神器,不用一行代码就能搞定!

    在Python语言的世界里,有许多的界面开发库,包括python内置的tkinter,以及pyQt.wxPython等第三方库.在利用这些库进行界面开发时,都需要开发者自己编写程序,设计界面,对于开发 ...

  4. Tkinter界面设计(运动会报名系统)

    Tkinter界面设计(运动会报名系统) 开发环境: Ubuntu20.04 pycharm MySQL数据库 需要下载的python库: tkinter:图形界面设计库 pymysql:调用MySQ ...

  5. 领域驱动设计_软件核心复杂性应对之道

    领域驱动设计_软件核心复杂性应对之道 转载于:https://www.cnblogs.com/MarvinGeng/archive/2013/02/21/2920968.html

  6. 《领域驱动设计:软件核心复杂性应对之道(修订版)》—第2章 2.1节模式:Ubiquitous Language...

    本节书摘来自异步社区<领域驱动设计:软件核心复杂性应对之道(修订版)>一书中的第2章,第2.1节模式:Ubiquitous Language,作者[美]埃里克•埃文斯(Eric Evans ...

  7. Py之wxPython:利用wxPython设计CMD软件窗口进行交互可视化

    Py之wxPython:利用wxPython设计CMD软件窗口进行交互可视化 目录 实现结果 实现代码 实现结果 实现代码 #coding:utf-8import wx import osclass ...

  8. python tkinter计算器实例_Python编程使用tkinter模块实现计算器软件完整代码示例

    Python 提供了多个图形开发界面的库.Tkinter就是其中之一. Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数 ...

  9. 新浪微博爬虫设计(Python版)

    最近手头上有一个项目,是关于新浪微博的,其中有一环要做新浪微博的爬虫.虽然之前把<Python学习手册>和<Python核心编程>都囫囵吞栆地通读完了,不过真正到做项目的时候还 ...

  10. java设计是什么软件下载_用Java设计下载软件

    用Java设计下载软件 HTTP 协议的简介 HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol),工作于网络应用层,自1990年起广泛应用于WWW 的全球信息服 ...

最新文章

  1. 解决push的时候有时候会卡一下的问题
  2. 电脑软件:5个实用的Windows软件,大幅度提高你的工作效率!
  3. Java Code Geeks通过Twitter赠送了免费的Sublime Text Editor许可
  4. docker-compose安装rabbitmq
  5. c语言leg 10,Leg massaging device
  6. Atitit 数据结构与常见文件元数据结构 目录 1. 分类 内部数据结构与外部存储数据结构 1 2. 编程语言内部数据结构 (堆栈 树 图等 1 2.1. 数据结构 (集合,列表,tree,map
  7. paip.System.out.println乱码解决
  8. 前端性能优化学习(慕课网)笔记
  9. 宋宝华Linux培训笔记-Linux多进程
  10. php gb2312转big5 函数
  11. 物联网应用三个阶段,你在哪里?
  12. 【警告】扣扣热键你了解多少
  13. 基于CAT12的report数据做QC质量检查,排除离群点——IQR欧拉数
  14. 新手焊接电路板_手工焊接电路板的步骤
  15. Python基础入门实验3附加题
  16. A Benchmark and Simulator for UAV Tracking(论文翻译)
  17. 马斯克告诉推特员工:要么继续高强度工作,要么拿遣散费走人;微信新增删除声音锁功能;Deno 1.28 发布|极客头条
  18. ASP.NET MVC 学习: 视图(http://whx.tzgt.gov.cn/newOperate/html/1/12/123/12058.html)
  19. No power supply specified for netVCC in Power Rail Confiquration.
  20. 用视频编辑软件给音频降噪的方法

热门文章

  1. 团队作业8----第二次项目冲刺(Beta阶段) 第一天
  2. 【防火墙篇】02. 向导快速设置 ❀ Juniper 防火墙
  3. TZOJ 3244 Happy YuYu's Birthday(数学几何)
  4. python自带idle_使用自带的IDLE
  5. div 跟着鼠标移动
  6. NLP-文本摘要:Rouge评测方法【Rouge-1、Rouge-2、Rouge-L、Rouge-W、Rouge-S】
  7. DNS污染是什么意思?DNS污染解决方案
  8. 基于PHP的简易教务管理系统
  9. elk报错:[syslogs] index has exceeded [1000000]
  10. 二值图像连通区域标记matlab,二值图像快速连通区域计算方法与流程