• 50行Python代码实现自动下载小说,并打包exe直接


    前言

    室友喊着没有小说看,让我给他推荐几本,这能难倒我?

    分分钟就用python给他把整个网站的小说都给下载下来了,不愧是我啊!

    话不多说,我们直接开整! (文末送读者福利)

    在这里插入图片描述

    要准备的东西

    软件

    python 3.8
    pycharm
    
    • 1
    • 2

    使用的模块

    requests  >>> pip install requests 数据请求
    parsel  >>> pip install parsel 数据解析
    (完善功能) 添加搜索功能 搜索小说名字或者作者名字
    tqdm  >>> pip install tqdm  下载进度条显示模块
    pandas >>> pip install pandas 输入的格式好看一些
    
    • 1
    • 2
    • 3
    • 4
    • 5

    win + R 输入cmd 输入安装命令 pip install 模块名 ;
    如果出现爆红,可能是因为,网络连接超时,切换国内镜像源
    黄色是警告 ,可以忽略;

    输入小说名下载

    在这里插入图片描述

    打包成exe程序, 是需要安装 pyinstaller ,命令提示符窗口输入 pip install pyinstaller

    代码展示

    # 导入数据请求模块
    import requests
    # 导入数据解析模块
    import parsel
    # 导入正则表达式模块
    import re
    # 导入pandas
    import pandas as pd
    # 导入进度条显示模块
    from tqdm import tqdm
    
    while True:
        key_word = input('请输入你想要下载的小说名字(输入0即可退出): ')
        if key_word == '0':
            break
        search_url = f'https://www.***.com/search.php?q={key_word}'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
        }
        response = requests.get(url=search_url, headers=headers)
        # print(response.text)
        selector_1 = parsel.Selector(response.text)
        divs = selector_1.css('.result-list div.result-item')
        # print(divs)
        if divs:
            lis = []
            for div in divs:
                novel_name = div.css('.result-game-item-title-link::attr(title)').get() # 小说名字
                href = div.css('.result-game-item-title-link::attr(href)').get().split('/')[2] # ID
                author = div.css('.result-game-item-info p:nth-child(1) span:nth-child(2)::text').get() # 作者
                # print(novel_name, href, author)
                dit = {
                    '书名': novel_name,
                    '作者': author,
                    '书ID': href,
                }
                lis.append(dit)
            print(f'一共搜索到{len(lis)}条数据内容, 结果如下')
            search_data = pd.DataFrame(lis)
            print(search_data)
            key_num = input('请选择你想要下载小说序号: ')  # 输入的数据类型字符串数据
            novel_id = lis[int(key_num)]['书ID']
            url = f'https://www.***.com/book/{novel_id}/'
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
            }
            response = requests.get(url, headers)
            # print(response.text)  # 正则表达式提取出来数据返回列表 ['天道修改器']
            novel_name = re.findall('
    (.*?)
    ', response.text)[0]
            novel_info = re.findall('
    (.*?)
    ', response.text)
            # print(novel_name)
            # print(novel_info)
            for novel_url, novel_title in tqdm(novel_info):
                # 'https://www.***e.com/book/60126/14362.html'
                novel_url = 'https://www.***.com' + novel_url
                # print(novel_url, novel_title)
                # 1. 发送请求, 对于刚刚分析得到的url地址发送请求
                # url = 'https://www.biqugee.com/book/60126/14362.html'
                response = requests.get(novel_url, headers)  #  返回response响应对象, 200表示请求成功
                # 2. 获取数据, 获取服务器返回的response响应数据
                # response.text 获取响应体返回文本数据(网页源代码)
                # print(response.text)
                # 3. 解析数据, 提取我们想要的数据内容 小说章节名字 以及小说内容
                # 提取数据方式: xpath css re 这三种方式都是可以提取数据
                selector = parsel.Selector(response.text)  # 把获取到的response.text 转换成 selector 对象
                # novel_title = selector.css('.bookname h1::text').get()  # get获取第一个标签数据 返回字符串数据
                # novel_title_1 = selector.xpath('//*[@]/h1/text()').get()  # get获取第一个标签数据 返回字符串数据
                novel_content_list = selector.css('#content::text').getall()  # getall 获取所有标签内容, 返回列表数据
                # 需要把列表转成字符串数据 join  \n换行符
                novel_content = '\n'.join(novel_content_list)
                # print(novel_title)
                # print(novel_title_1)
                # print(novel_content_list)
                # print(novel_content)
                # 4. 保存数据
                # w写入数据但是覆盖 a写入追加写入, 写入文件末尾 b 二进制模式
                """
                第一章 xxx
                小说内容
                第二章 xxx
                小说内容
                """
                with open(novel_name + '.txt', mode='a', encoding='utf-8') as f:
                    f.write(novel_title)
                    f.write('\n')
                    f.write(novel_content)
                    f.write('\n')
                # print('正在保存', novel_title)
    
        else:
            print('请正确输入小说名字或者作者名字 / 没有这本书的数据..')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95

    读者福利:知道你对Python感兴趣,便准备了这套python学习资料

    对于0基础小白入门:

    如果你是零基础小白,想快速入门Python是可以考虑的。

    一方面是学习时间相对较短,学习内容更全面更集中。
    二方面还可以找到适合自己的学习方案

    包括:Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等学习教程。带你从零基础系统性的学好Python!

    零基础Python学习资源介绍

    👉Python学习路线汇总👈

    Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(学习教程文末领取哈)

    👉Python必备开发工具👈

    温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

    👉Python学习视频600合集👈

    观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

    👉实战案例👈

    光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

    👉100道Python练习题👈

    检查学习结果。

    👉面试刷题👈



    在这里插入图片描述

    资料领取

    这份完整版的Python全套学习资料已为大家备好,朋友们如果需要可以微信扫描下方二维码添加,输入"领取资料" 可免费领取全套资料有什么需要协作的还可以随时联系我朋友圈也会不定时的更新最前言python知识。↓↓↓
    或者

    点此链接】领取

    这世界上赚钱成本最低的就是:用知识投资大脑

    人生什么时候学习都不晚,晚的是你一直想学却一直没有行动,而导致大量内耗

    最后祝你学习愉快

    好文推荐

    了解python的前景:https://blog.csdn.net/weixin_49891576/article/details/127187029

    python有什么用:https://blog.csdn.net/weixin_49891576/article/details/127125308

  • 相关阅读:
    【接雨水】python刷题记录
    [车联网安全自学篇] 四十八. Android安全之聊聊Drozer模块插件
    Docker笔记-Debian容器内搭建ssh服务
    【JavaSE】多线程篇(一)线程的相关概念与线程的基本使用
    Windows环境下Qt Creator控制台输出中文乱码解决方法
    Java基于springboot+vue的汽车饰品销售购物商城系统 前后端分离
    DRM遇到的实际问题及领悟(1)
    HDLbits : Module addsub
    更快,更强的.NET 7 发布了
    (附源码)springboot 智能停车场系统 毕业设计065415
  • 原文地址:https://blog.csdn.net/weixin_49891576/article/details/127966420