一、实现描述
做一个图形程序,有一个Listbox和一个button。
- 读取sanguo.html,Listbox存储前十回的三国演义的小说的标题(title)
- 选中Listbox某一行后,用一个Label显示该下载链接
效果:
二、实现
(1)导库
import tkinter as tk
from bs4 import BeautifulSoup
(2)解析HTML页面
解析对应的页面并存储
- 考虑到文章标题和链接要有映射关系,故把它们转换成键值对模式
# 解析html,获取前十回文章标题
text = [] #存储文章
link = [] #存储链接
path = 'sanguo.html'
htmlfile = open(path, 'r', encoding='utf-8')
html = htmlfile.read()
soup = BeautifulSoup(html, 'lxml')
# 找到相应的标题内容
div = soup.findAll(name="div", attrs={"class": "book-mulu"}) #这里返回的是一个数组
li = div[0].findAll(name="li", limit=10) #获取前十回,使用limit
# print(li)
for i in li:
text.append(i.text) #将标题添加到数组
link.append(i.a.get("href")) #将链接添加到数组
# print(i)
# 将文章和链接映射为一个键值对
dictionary = dict(zip(text, link))
(3)创建tk窗口,添加组件
- button、Listbox、label。
- 并创建变量
- 定义获取链接的函数
window = tk.Tk()
window.title('my window')
# 窗口尺寸
window.geometry('400x350')
# 创建一个lable
var1 = tk.StringVar() #创建变量
l = tk.Label(window, bg='green', width=50, textvariable=var1)
l.pack()
# 按钮事件
def get_link():
value = lb.get(lb.curselection())
vallink = dictionary[value] #根据选中的text去寻找对应的键值对
var1.set(vallink)
# 创建一个按钮
btn = tk.Button(window, text='获取链接', width=10, height=2, command=get_link)
btn.pack()
# 创建一个Listbox和变量var2,并把var2的值赋给Listbox
var2 = tk.StringVar()
var2.set(text)
# 创建Listbox
lb = tk.Listbox(window, listvariable=var2, width=50) #将var2的值赋值给Listbox
for item in text:
lb.insert('end', item) #从后面开始加入值
lb.pack()
# 显示
window.mainloop()
三、完整代码
sanguo.html
文件链接:https://pan.baidu.com/s/1GXPFGeX8J1t8yb4L0y0NFQ
提取码:sdst
import tkinter as tk
from bs4 import BeautifulSoup
# 解析html,获取前十回文章标题
text = [] #存储文章
link = [] #存储链接
path = 'sanguo.html'
htmlfile = open(path, 'r', encoding='utf-8')
html = htmlfile.read()
soup = BeautifulSoup(html, 'lxml')
# 找到相应的标题内容
div = soup.findAll(name="div", attrs={"class": "book-mulu"}) #这里返回的是一个数组
li = div[0].findAll(name="li", limit=10) #获取前十回,使用limit
# print(li)
for i in li:
text.append(i.text) #将标题添加到数组
link.append(i.a.get("href")) #将链接添加到数组
# print(i)
# 将文章和链接映射为一个键值对
dictionary = dict(zip(text, link))
window = tk.Tk()
window.title('my window')
# 窗口尺寸
window.geometry('400x350')
# 创建一个lable
var1 = tk.StringVar() #创建变量
l = tk.Label(window, bg='green', width=50, textvariable=var1)
l.pack()
# 按钮事件
def get_link():
value = lb.get(lb.curselection())
vallink = dictionary[value] #根据选中的text去寻找对应的键值对
var1.set(vallink)
# 创建一个按钮
btn = tk.Button(window, text='获取链接', width=10, height=2, command=get_link)
btn.pack()
# 创建一个Listbox和变量var2,并把var2的值赋给Listbox
var2 = tk.StringVar()
var2.set(text)
# 创建Listbox
lb = tk.Listbox(window, listvariable=var2, width=50) #将var2的值赋值给Listbox
for item in text:
lb.insert('end', item) #从后面开始加入值
lb.pack()
# 显示
window.mainloop()
# print(dictionary)
# print(text)
# print(link)