python项目实战 小说下载源码

小说下载

python 复制代码
# 引入框架
import tkinter as tk
import requests
from lxml import etree


# 类
class Query:
    # 类里面的一个固定方法
    def __init__(self, master) -> None:
        self.wd_1 = master
        # 设置窗口大小
        self.wd_1.geometry("400x330+700+20")
        # 设置窗口标题
        self.wd_1.title("小说下载")
        # 设置窗口的图标
        self.wd_1.iconbitmap("./小说下载/小说.ico")
        # tk 特殊变量  绑定输入框
        self.index_url = tk.StringVar()
        self.create_page()
        self.handle_event()

    def create_page(self):
        """创建页面"""
        # label 文本
        tk.Label(
            self.wd_1,
            text="请输入书本网小说第一章第一页url地址,书本网网址为\nhttp://www.bookbenx.com/",
            justify=tk.LEFT,
        ).place(x=17, y=10)
        # entry 输入框
        tk.Entry(self.wd_1, width=30, textvariable=self.index_url).place(x=20, y=52)
        # 保存路径  lable
        tk.Label(self.wd_1, text="保存路径").place(x=20, y=72)
        tk.Entry(self.wd_1, width=20).place(x=20, y=92)
        # tk.Label(self.wd_1, text="浏览").place(x=20, y=82)
        self.button_1 = tk.Button(self.wd_1, text="浏览", width=3, height=1)
        self.button_1.place(x=180, y=82)
        self.bt_download = tk.Button(self.wd_1, text="下载", width=3, height=1)
        self.bt_download.place(x=220, y=82)
        self.button_3 = tk.Button(self.wd_1, text="清空", width=3, height=1)
        self.button_3.place(x=260, y=82)
        # 文本框
        self.text_1 = tk.Text(self.wd_1, width=50, height=14)
        self.text_1.place(x=20, y=120)

    def handle_event(self):
        # 点击下载开始下载小说
        # 拿到小说链接
        # 当下在按钮被点击的时候 获取下载地址,然后进行下载
        self.bt_download["command"] = self.download_book

    def download_book(self):
        book_url = self.index_url.get()

        # 下载小说
        # 伪装自己
        while True:
            headers = {
                "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
            }

            # 发送请求
            resp = requests.get(book_url, headers=headers)
            # 设置编码
            resp.encoding = "utf-8"
            # 响应
            ##print(resp.text)
            # 保存
            e = etree.HTML(resp.text)

            # 小说内容
            # 书本网

            info = "\n".join(e.xpath("//div//article/p/text()"))

            # 全本小说网

            # info = "\n".join(e.xpath('//div[@id="booktxt"]/p/text()'))

            # 小说标题
            # 书本网

            title = e.xpath('string(//div//p[@class="style_h1"])')

            # 全本小说网
            # title = e.xpath("//h1/text()")[0]

            # 小说名字
            # 书本网

            book_name = e.xpath('//meta[@property="og:title"]/@content')[0]

            # 全本小说网

            # book_name = e.xpath('//div[@id="header_title"]/a')

            # 下一页 or 下一章
            # 书本网
            next_url = e.xpath('//div//a[@id="next_url"]/@href')[0]
            # url 重新赋值
            book_url = "http://www.bookbenx.com" + next_url

            # 全本小说网
            # 获取下一页的小说内容
            # requests.get(next_url, headers=headers)
            # 输出到txt里
            # print(next_url)
            # print(title)
            # print(info)
            # print(book_name)
            next_name = e.xpath('//div//a[@id="next_url"]/text()')[0]
            # print(next_name)
            if next_name == "没有了 ":
                break

            with open(book_name + "." + "txt", "a", encoding="utf-8") as f:
                f.write(title + "\n\n" + info + "\n\n")
            self.text_1.insert("insert", f"{title}下载完成\n")
            self.text_1.update()


if __name__ == "__main__":
    # 窗口对象
    wd_1 = tk.Tk()
    # 调用页面类,传入窗口对象
    Query(wd_1)
    # 事件循环
    wd_1.mainloop()
相关推荐
nuclear201134 分钟前
使用Python 在Excel中创建和取消数据分组 - 详解
python·excel数据分组·创建excel分组·excel分类汇总·excel嵌套分组·excel大纲级别·取消excel分组
Lucky小小吴1 小时前
有关django、python版本、sqlite3版本冲突问题
python·django·sqlite
GIS 数据栈1 小时前
每日一书 《基于ArcGIS的Python编程秘笈》
开发语言·python·arcgis
爱分享的码瑞哥1 小时前
Python爬虫中的IP封禁问题及其解决方案
爬虫·python·tcp/ip
傻啦嘿哟2 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
B站计算机毕业设计超人3 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
IT古董3 小时前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
湫ccc3 小时前
《Python基础》之pip换国内镜像源
开发语言·python·pip
hakesashou3 小时前
Python中常用的函数介绍
java·网络·python
菜鸟的人工智能之路4 小时前
极坐标气泡图:医学数据分析的可视化新视角
python·数据分析·健康医疗