前言
今天教大家自己打造一款非常实用的小说下载器,让你轻轻松松看小说 本次的小说下载代码就不介绍了,这不是有手就行?小说的代码放在文末 这次主要是教大家如何做一个下载器的界面,如下图
知识点
- tkinter
开发环境
- 版 本:Python 3.8 |Anaconda, Inc.|
- 编辑器:pycharm 2021.2
现在来写界面的代码
先创建一个窗口
代码语言:javascript复制import tkinter
if __name__ == '__main__':
# 窗口对象
root = tkinter.Tk()
# 事件循环
root.mainloop()
绘制窗口界面
代码语言:javascript复制class Query:
def __init__(self, master):
# 类里面固定的一个方法
self.root = master
# 设置窗口对象的大小
self.root.geometry('600x500 100 100')
# 设置窗口的标题
self.root.title('笔趣阁小说下载')
# 设置窗口的图标
self.root.iconbitmap('favicon.ico')
# tkinter 的特殊变量,可以与组件里面的文字进行绑定
self.index_url = tkinter.StringVar()
self.create_page()
self.handle_event()
创建界面,设置点击按钮
代码语言:javascript复制def create_page(self):
# label 文本框
tkinter.Label(self.root, text='请输入你想要的下载的小说的目录页链接').place(x=30, y=30)
# 输入框 entry 只是布局了一个控件
tkinter.Entry(self.root, width=70, textvariable=self.index_url).place(x=30, y=60)
# 保存路径
tkinter.Label(self.root, text='保存路径').place(x=30, y=90)
# # 路径标签
tkinter.Entry(self.root).place(x=30, y=120)
self.button1 = tkinter.Button(self.root, text='浏览', width=6, height=1)
self.button1.place(x=200, y=120)
self.button2 = tkinter.Button(self.root, text='下载', width=6, height=1)
self.button2.place(x=350, y=120)
self.button3 = tkinter.Button(self.root, text='清空', width=6, height=1)
self.button3.place(x=450, y=120)
# 文本框
self.text = tkinter.Text(self.root, width=70, height=22)
self.text.place(x=30, y=160)
调用小说代码,并设置点击事件
代码语言:javascript复制def handle_event(self):
# 点击下载,就开始下载小说
# 拿到需要的链接,
# 当下载按钮被点击的时候,获取下载地址,然后再进行下载
self.button2['command'] = self.download_book
def download_book(self):
book_url = self.index_url.get()
if book_url:
print(book_url)
# 下载小说逻辑之前公开课已经实现过了,直接导入使用
# 调用方法,获取每一章的下载地址
links = get_book_links(book_url)
for link in links:
print(book_url link)
# 调用现有的逻辑,实现一章小说的下载
title, text = download_one_chapter(book_url link)
save_text(title, text)
# 把下载的信息插入的 text 文本框里面去
# 第0行,第0个
self.text.insert(0.0, f'{title} 下载成功n')
self.text.update()
else:
messagebox.showinfo(title='提示', message='下载链接不能为空')
这是小说下载代码
代码语言:javascript复制import requests
import parsel
# 获取网页源代码
# 模拟浏览器发送请求
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
def download_one_chapter(target_url):
# 需要请求的网址
# target_url = 'http://www.shuquge.com/txt/8659/2324753.html'
response = requests.get(target_url, headers=headers)
# 解码 万能解码
response.encoding = response.apparent_encoding
# 文字方法 获取网页文字内容
# print(response.text)
# 字符串
html = response.text
# 从网页源代码里面拿到信息
# 使用parsel 把字符串变成对象
sel = parsel.Selector(html)
# 数据清除 清除空白字符串
# 列表推导式
contents1 = [content.strip() for content in contents]
# print(contents1)
# 把列表编程字符串
text = 'n'.join(contents1)
# print(text)
return title, text
def save_text(title, text):
# 保存小说内容
# open 操作文件(写入、读取)
file = open(title '.txt', mode='w', encoding='utf-8')
# 只能写入字符串
file.write(title)
file.write(text)
# 关闭文件
file.close()
# 传入一本小说的目录
def get_book_links(book_url):
response = requests.get(book_url)
response.encoding = response.apparent_encoding
html = response.text
sel = parsel.Selector(html)
links = sel.css('dd a::attr(href)').extract()
return links
# 下载一本小说
def get_one_book(book_url):
links = get_book_links(book_url)
for link in links[12:]:
# print('http://www.shuquge.com/txt/8659/' link)
download_one_chapter(book_url link)