python图形化获取三国章节链接

本文介绍了如何使用Python创建一个图形化程序,该程序从`sanguo.html`中解析出前三十回的三国演义章节标题,并在Listbox中显示。用户选择Listbox中的章节后,程序会在Label中显示相应的下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现描述

做一个图形程序,有一个Listbox和一个button。

  1. 读取sanguo.html,Listbox存储前十回的三国演义的小说的标题(title)
  2. 选中Listbox某一行后,用一个Label显示该下载链接

效果

image-20211221105420042

二、实现

(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)

<think>嗯,用户遇到了Python中的FileNotFoundError,具体是找不到'sanguo.txt'这个文件。首先,我需要回忆一下常见的导致这个错误的原因。可能的情况包括文件路径错误、文件名拼写错误、文件确实不存在,或者权限问题等等。 根据用户提供的引用内容,比如引用[1]提到检查文件路径和当前工作目录,我应该先建议用户检查文件路径是否正确。可能用户是在相对路径下运行脚本,而文件并不在脚本所在的目录中。这时候需要确认当前工作目录是否正确,可以用os.getcwd()来查看。 然后,文件名是否正确,比如大小写是否匹配,扩展名是否正确,比如sanguo.txt和Sanguo.txt在区分大小写的系统上是不一样的。用户可能需要检查文件名是否完全正确,包括扩展名。 接下来,绝对路径和相对路径的问题。如果用户使用的是相对路径,可能需要改为绝对路径,或者调整路径结构。比如,如果文件在子目录data下,应该写成'data/sanguo.txt',或者在代码中使用os.path.join来构建路径,避免手动拼接导致的错误。 另外,用户可能没有注意到文件是否真的存在于指定的路径中。需要手动检查文件是否存在,或者编写代码检查,比如使用os.path.exists()函数。如果不存在,可能需要重新下载或创建文件。 还有权限的问题,虽然引用里没有提到,但有时候文件权限可能导致无法读取,不过这种情况在Windows下较少见,更多是在Linux系统下。不过用户的问题可能不涉及权限,但也可以提一下。 另外,引用[3]提到环境变量的问题,比如pydot需要dot.exe在路径中。虽然用户的问题不是关于外部程序,但路径设置的问题可能有类似之处,比如当前工作目录是否在系统路径中。不过这里主要是文件路径的问题,所以可能不需要涉及环境变量,但可以提醒用户检查执行脚本的目录。 总结下来,解决步骤应该是:1. 检查当前工作目录;2. 确认文件名和路径正确;3. 使用绝对路径或正确相对路径;4. 检查文件是否存在;5. 处理异常,使用try-except块来捕获错误并提供友好提示。 另外,用户可能需要代码示例,比如如何正确打开文件,如何处理路径问题,以及如何用os模块来检查文件是否存在。同时,可以建议使用os.path模块来处理路径,提高代码的可移植性。 可能用户是新手,所以需要详细说明每一步的操作,比如如何打印当前工作目录,如何修改路径,以及如何处理异常。还要注意代码示例的正确性,确保语法正确,比如使用with open语句来安全地打开文件。 最后,生成相关问题的时候,可以围绕其他常见的文件错误,比如权限问题、路径拼接方法、异常处理的其他技巧,以及如何动态获取文件路径等。这样用户如果有其他相关问题,可以进一步参考。</think>### 解决Python中`FileNotFoundError: [Errno 2] No such file or directory: 'sanguo.txt'`的步骤 #### 1. **确认文件路径和名称** - **检查文件名拼写**:确保文件名(如`sanguo.txt`)与代码中引用的名称完全一致,包括大小写和扩展名[^1]。 - **验证文件位置**:若使用相对路径(如`sanguo.txt`),文件需与Python脚本在同一目录下。可通过以下代码查看当前工作目录: ```python import os print(os.getcwd()) # 输出当前工作目录 ``` #### 2. **使用绝对路径替代相对路径** - 若文件不在当前工作目录,需通过绝对路径访问: ```python file_path = r"C:\Users\YourName\Documents\sanguo.txt" # Windows示例 # 或 Linux/macOS示例 # file_path = "/home/username/Documents/sanguo.txt" with open(file_path, 'r') as f: content = f.read() ``` #### 3. **动态构建路径** - 使用`os.path`模块处理路径兼容性问题: ```python import os base_dir = os.path.dirname(__file__) # 获取脚本所在目录 file_path = os.path.join(base_dir, 'data', 'sanguo.txt') # 拼接路径 ``` #### 4. **检查文件是否存在** - 在尝试打开文件前,先验证其是否存在: ```python if os.path.exists(file_path): with open(file_path, 'r') as f: content = f.read() else: print(f"文件 {file_path} 不存在!") ``` #### 5. **添加异常处理** - 使用`try-except`块捕获并处理错误: ```python try: with open('sanguo.txt', 'r') as f: content = f.read() except FileNotFoundError: print("文件未找到,请检查路径或文件名!") ``` --- ### 代码修复示例 ```python import os # 方法1:动态构建路径 current_dir = os.path.dirname(os.path.abspath(__file__)) file_path = os.path.join(current_dir, 'sanguo.txt') try: with open(file_path, 'r', encoding='utf-8') as f: print(f.read()) except FileNotFoundError: print(f"错误:文件 '{file_path}' 不存在,请检查路径或重新下载文件。") ``` --- ### 关键注意事项 1. **编码问题**:添加`encoding='utf-8'`参数以避免因编码不一致导致的读取错误。 2. **跨平台兼容性**:使用`os.path.join()`替代手动拼接路径(如`data/sanguo.txt`)。 3. **文件权限**:若文件被其他程序占用或无读取权限,也会导致错误(需检查文件属性)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值