美文网首页python待看python无间
用Python打造一款非常实用的小说下载器,只需链接,即可一键下

用Python打造一款非常实用的小说下载器,只需链接,即可一键下

作者: Python案例教学 | 来源:发表于2022-02-11 16:12 被阅读0次

    前言

    今天教大家自己打造一款非常实用的小说下载器,让你轻轻松松看小说
    本次的小说下载代码就不介绍了,这不是有手就行?小说的代码放在文末
    这次主要是教大家如何做一个下载器的界面,如下图

    知识点

    • tkinter

    开发环境

    • 版 本:Python 3.8 |Anaconda, Inc.|
    • 编辑器:pycharm 2021.2

    现在来写界面的代码

    先创建一个窗口

    import tkinter
    
    if __name__ == '__main__':
        # 窗口对象
        root = tkinter.Tk()
    
        # 事件循环
        root.mainloop()
    

    绘制窗口界面

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

    创建界面,设置点击按钮

    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)
    

    调用小说代码,并设置点击事件

    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='下载链接不能为空')
    

    这是小说下载代码

    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)
    

    相关文章

      网友评论

        本文标题:用Python打造一款非常实用的小说下载器,只需链接,即可一键下

        本文链接:https://www.haomeiwen.com/subject/whznkrtx.html