Yellowpython 2019-06-21
这次练习的题目是实现一个简单的RSS功能,需要了解的知识点:
tkinter,在上一篇《简单的记事本》中已经了解了一些tkinter的用法,在这里延续了上一篇,加深一下印象。
urllib,HTMLPaser库的使用,注意python3已经与python2有了很大不同。
# -*- coding:utf-8 -*- #编码声明 # file: run_rss_one.py #文件名 import tkinter import urllib import requests from html.parser import HTMLParser import os #导入方法模块 class MyHtmlParser(HTMLParser): def __init__(self,edit): HTMLParser.__init__(self) self.edit = edit self.a_title = False self.a_text = False def handle_starttag(self,tag,attrs): if tag == 'title': self.a_title = True if tag == 'a': self.a_text=True def handle_endtag(self,tag): if tag == 'title': self.a_title = False if tag == 'a': self.a_text = False def handle_data(self,data): if self.a_title: self.edit.insert(tkinter.END,data) if self.a_text: self.edit.insert(tkinter.END,data+'\n')
这里class MyHtmlParser继承了HTMLParser,根据这个模板你可以添加你自己需要从网页上获取的内容了,假设你的网页中有标签p,试一试新增一个属性self.a_p
另外对于HTMLParser,这个了解起来可以需要费一些功夫,不过又有什么关系呢,你所浪费掉的时间总会在某个时候得到收获的,人生嘛时间不浪费在这里也会浪费在那里。
对于下面的class Window,定义了一些窗口属性,接下来在代码中我会简单记录一下它的用法。
class Window: def __init__(self, root): self.root = root self.entryUrl = tkinter.Entry(root,width = 30)#Entry是输入控件 self.entryUrl.place(x = 65, y = 15)#place定义了它放置的位置,然后如下的控件皆按照这样的方式定义好了 #这里self.Get在这个函数中展示了输出的东西,当点击按钮时候,就会显示到文本框中 self.get = tkinter.Button(root, text = '读取RSS', command = self.Get, font = ('system','10')) self.get.place(x = 350, y = 15) self.frame = tkinter.Frame(root, bd=2) self.scrollbar = tkinter.Scrollbar(self.frame) self.edit = tkinter.Text(self.frame,yscrollcommand = self.scrollbar.set, width = 96, height = 32) self.scrollbar.config(command=self.edit.yview) self.edit.pack(side = tkinter.LEFT) self.scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) self.frame.place(y = 60) #用label定义一个提示输入的内容,然后把这个内容放置到输入框的下方 self.indicate=tkinter.Label(root,text='(Please input: local path or url)',fg='red') self.indicate.place(x=65,y=35) def Get(self): url = self.entryUrl.get() #做一个判断如果是本地路径就获取文件名 if os.path.isdir(url): #如果要循环读取目录及子目录,用os.walk dir=os.listdir(url) #把路径下所有的文件及目录都展示在tkinter的文本框中,请回顾init中内容,self.edit本质就是一个Text阿 for dir_n in dir: self.edit.insert(tkinter.END,url+ ' ' +dir_n+'\n') #在这里也可以继续深入,对路径下的文件判断,比如获取文中的几行内容,抑或是对路径下的目录继续统计下去 else: #注意python3的用法要加request response=urllib.request.urlopen(url) page = response.read() # 读取URL内容 hp = MyHtmlParser(self.edit) #解析html hp.feed(page.decode('utf-8')) #feed(),主要用于接受带html标签的str,当调用这个方法并提供相应的data时,实例开始执行 hp.close()#结束执行close()
在这里通过HTMLPaser对解析html有了一个简单的了解,在下一篇文章中,会继续延续此文的内容,主要重点放在获取某个网站的特定内容。
所以今天你走过的路决定了你明天可以走的路,每一个障碍都要及时解决,不要轻易绕过
然后再添加上主体控制部分,就可以运行你的文件试一试了。
root = tkinter.Tk() root.title('RSS 阅读器') window = Window(root) root.minsize(700,500) root.maxsize(700,500) root.mainloop()
新手之作,欢迎探讨一块儿学习。