栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

tkinter-TinUI-xml实战(3)获取博客链接

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

tkinter-TinUI-xml实战(3)获取博客链接

tkinter-TinUI-xml实战(3)获取博客链接

引言声明文件结构编写界面

交互界面(main-get.xml)链接显示界面 编写TinUIXml-IDO完整代码效果结语

引言

CSDN是一个充满各种编程知识的技术网站,无论是小白还是大神都可以在这里找到对自己有用的文章。一些人有自己关注的博主,那是因为这个博主的系列文章正好对上了自己的胃口。那么现在我们将开发一个基于tkinter的小程序,以获取某一个博主的文章,并用链接形式呈现到TinUI界面上。

我不是做爬虫的,只是使用类似的功能代码而已。

声明

本项目属于作者原创,禁止用于非法途径。功能代码部分十分简单,因此着重说明界面部分的编写。

本项目使用的TinUI为我开源并维护在GitHub上的主文件——TinUI.py。当然,使用PYPI中下载安装的tinui也可以

文件结构

本次使用的文件结构如下:

main-get.xml - 主界面tinui.py - TinUI界面核心支持博客获取.py - 本次项目文件 编写界面

在本项目中,界面主要由两部分组成:

    交互部分:显示输入框等交互控件显示部分:显示获取到的所有博客链接
交互界面(main-get.xml)

这个交互界面十分简单,只有两个主要控件,与本系列第一篇文章“天气预报”的交互部分一模一样。

以下是main-get.xml的内容:


    
        entry
        
    
    
        
    

链接显示界面

因为我们无法确定博客文章的数量,所以没办法将界面布局写在xml文件中。

虽然我们需要动态添加界面布局元素,但是我们可以确定我们显示的所有链接(link)控件元素的排列方式:


    
        
    
    
        
    
    ...

这个类xml形式的字符串,将在循环代码中动态添加。在源码中,使用__go函数来执行这个链接显示界面的控件渲染:

def __go():
    button[1]()
    url=entry.get()
    if url=='':
        return
    urls_xml=''
    result=request.urlopen(url)
    html=result.read().decode('utf-8')
    links=read_html(html)
    x2.clean()
    for link in links:
        add=f''
        urls_xml+=add
    urls_xml+=''
    x2.loadxml(urls_xml)

变量add就是我们动态添加的控件xml描述文本。

编写TinUIXml-IDO

这次基本没什么前后端融合代码:

#=====IDO=====
u=BasicTinUI(root,height=50)#主界面
u.pack(fill='both',expand=True)
x=TinUIXml(u)
u2=TinUI(root)#显示链接
u2.pack(fill='both',expand=True)
x2=TinUIXml(u2)
#in
x.funcs['go']=go
#during
with open('main-get.xml',mode='r',encoding='utf-8') as f:
    xml=f.read()
x.loadxml(xml)
#out
entry=x.tags['entry'][0]
button=x.tags['button'][2]
完整代码

网络请求与正则解析部分相信大家都很熟悉了,这里直接给出完整代码:

from urllib import request
from tkinter import Tk
import re
import time
import random
from threading import Thread
from tinui import *


def go(event):
    Thread(target=__go).start()


def __go():
    button[1]()
    url=entry.get()
    if url=='':
        return
    urls_xml=''
    result=request.urlopen(url)
    html=result.read().decode('utf-8')
    links=read_html(html)
    x2.clean()
    for link in links:
        add=f''
        urls_xml+=add
    urls_xml+=''
    x2.loadxml(urls_xml)

def read_html(html):#解析HTML
    article_div=re.findall('(.*?)
',html,re.S|re.M) links=[] for article in article_div: link=re.search('',article,re.S|re.M) title=re.search('(.*?)',article,re.S|re.M) title=title.group(1)[11:-9] des=re.search('(.*?)

',article,re.S|re.M) links.append((link.group(1),link.group(2),title,des.group(1)[9:-7])) return links root=Tk() root.title('CSDN博客列表获取') root.geometry('600x600') u=BasicTinUI(root,height=50) u.pack(fill='both',expand=True) x=TinUIXml(u) u2=TinUI(root)#显示链接 u2.pack(fill='both',expand=True) x2=TinUIXml(u2) #in x.funcs['go']=go #during with open('main-get.xml',mode='r',encoding='utf-8') as f: xml=f.read() x.loadxml(xml) #out entry=x.tags['entry'][0] button=x.tags['button'][2] root.mainloop() 效果

在这里我们强制使用博客列表的网页网址。


结语

加上本系列提一篇的“天气预报”,这是第二次将TinUI与网络HTML解析相结合,体现了TinUI强大的融合能力。下次准备写一个本地程序。开始你的tkinter编程之路吧。

tkinter创新

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/725579.html

Python相关栏目本月热门文章

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号