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

news2024/11/27 12:39:41

前言

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

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

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

在这里插入图片描述

要准备的东西

软件

python 3.8
pycharm

使用的模块

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

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('请正确输入小说名字或者作者名字 / 没有这本书的数据..')

读者福利:知道你对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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python之爬虫的学习

python爬虫入门-1为什么要学习爬虫浏览器背后的秘密常用网络请求URL解析HTTP常见响应状态码相关库及其简单使用相关引用综合栗子为什么要学习爬虫 现如今,浏览器可以更方便的进行网页交互以人们适合阅读的方式展示数据;但爬虫或者网页抓取对数据的收集和…

第5章 输入/输出(I/O)管理

5.1 I/O管理概述 5.1.1 I/O设备 I/O设备的分类(按使用特性分类)I/O设备的分类(按传输速率分类)I/O设备的分类(按信息交换的单位分类) 5.1.2 I/O控制方式 有4种: 1. 程序直接控制方式2. 中…

都是同样条件的mysql select语句,为什么读到的内容却不一样?

假设当前数据库里有下面这张表。 老规矩,以下内容还是默认发生在innodb引擎的可重复读隔离级别下。 大家可以看到,线程1,同样都是读 age > 3 的数据。第一次读到1条数据,这个是原始状态。这之后线程2将id2的age字段也改成了3。…

kubelet源码 删除pod(二)

kubelet源码 删除pod(二) 本文中含有k8s的一个bug,我也正在努力提交PR,不过会不会被merge就不清楚了。 kubernetes PR地址 pod_workers.go是主要处理pod变化的文件,在1.22版本后对这个文件进行了比较大的修改。把属…

[附源码]SSM计算机毕业设计基于SSM的酒店管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

QT 字符串操作常用接口函数

目录常见字符串处理函数空白字符串处理函数查询字符串数据字符串比较字符串的转换QT版本的STLQLinkedList和QVector的区别QT提供的STL命名风格的迭代器QMap和QHash经过该简单设置可以防止msvc环境下使用qdebug打印输出时出现中文乱码的问题。 #include "learn.h" #i…

长话短说:学习网络安全自学好还是报培训班?

无论你是大学生还是在职人员,想学网络安全时,都会面临两个选择,自学或者报班。报班通常太费钱,时间又不自由;自学又不知道如何下手,担心自己坚持不下来。怎么办? 我们先分析一下自学和培训班的…

【文本分类】《融合注意力和剪裁机制的通用文本分类模型》

阅读摘要:   针对实际场景中长短文本大量的情况,提出了双通道注意力机制与长文本裁剪机制来改进文本分类模型,最终提高了精度。 参考文献:   [1] 融合注意力和剪裁机制的通用文本分类模型 参考论文信息 论文名称:《…

第三版全球干旱指数和潜在蒸散数据发布

Robert J. Zomer ;JianchuXu;AntonioTrabucco(Kunming Institute of Botany, Chinese Academy of Science;Euro-Mediterranean Center on Climate Change, IAFES Division, Sassari, Italy) 摘要 潜在蒸散(Potential evapotranspiration&…

Linux Shell 自动交互功能实现

1. EOF 多文本输入 需求案例 1 新交付了一批机器,每台机器只分配了一块落盘 ,现在根据需求对该盘进行分区并实现挂载,如何实现? 需求分析: 对于一个盘,实现分区挂载到不同目录,通常思路有两…

灯具行业MES解决方案,实现产品的正反向追溯

灯具照明行业产业链主要包括上游原材料、中游照明产品生产及封装、下游照明细分应用领域。产业链上游、中游多为资本密集与技术密集型行业,产品高度标准化,市场相对集中。而产业链下游产品需求相对个性化,多品类、多SKU,市场集中度…

探索性数据分析

有目的性的探索数据集以获取具体的优化方向和思路。 Intuition 探索性数据分析 (EDA) 以了解数据集的信号和细微差别。这是一个循环过程,可以在开发过程的各个阶段(标记之前/之后、预处理等)完成,具体取决于问题的定义程度。例如&…

【Proteus仿真】【STM32单片机】蔬菜大棚温湿度控制系统设计

文章目录一、主要功能二、硬件资源三、软件设计四、实验现象联系作者一、主要功能 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、DHT11温湿度、蜂鸣器、按键、LED、继电器、电机模块等。 主要功能: 系统运行后,LCD1602显示DH…

setup获取props和自定义事件、通过expose暴露给ref获取属性和方法、setup顶层async、setup返回函数

文章目录1. setup获取props和自定义事件2. 通过expose暴露给ref获取属性和方法3. setup顶层async4. setup返回函数1. setup获取props和自定义事件 child 组件&#xff1a; <template><div><h3>我是child组件 -- {{ title }}</h3><button click&qu…

We have awesome remote U.S. jobs waiting for engineers like you.

发件人&#xff1a;Turing - U.S. Software Jobs <hiringturing.com> Hi I saw your profile online and wanted to reach out! You might be a great fit for many high-paying remote U.S. software engineering opportunities on Turing.com. Turing is based in …

steam搬砖,长期稳定副业,附防坑指南助你不掉坑

大家伙&#xff0c;我是阿阳 今天给大家拆解一个冷门项目&#xff0c;国外steam游戏搬砖项目&#xff0c;这个项目也是自己正在做的第二个项目&#xff0c;虽然冷门&#xff0c;不暴利&#xff0c;做了这么久赚钱一直很稳定。站在一个搞钱人的角度来说&#xff0c;这个项目作为…

Docker部署单节点Kafka

文章目录Docker部署单节点Kafka参考镜像wurstmeister/zookeeper Overviewwurstmeister/kafka Overview部署单Brokerkafka 环境变量&#xff1a;启动与停止命令测试验证&#xff1a;参考文章Docker部署单节点Kafka 参考镜像 wurstmeister/zookeeper Overview docker pull wur…

Hadoop总结——HDFS

一、HDFS概述 1.1 HDFS产生背景 随着数据量越来越大&#xff0c;在一个操作系统管辖的范围内存不下了&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#xff0c;这就是分布式文件…

记一次自定义starter引发的线上事故复盘

前言 本文素材来源于业务部门技术负责人某次线上事故复盘分享。故事的背景是这样&#xff0c;该业务部门招了一个技术挺不错的小伙子小张&#xff0c;由于小张技术能力在该部门比较突出&#xff0c;在入职不久后&#xff0c;他便成为这个部门某个项目组的team leader&#xff…

计算机外设:显示器是如何工作的?

本节我们将了解计算机的外设之一&#xff1a;显示器的底层工作原理。通过本节&#xff0c;你会知道电脑显示器是如何实时展示我们在计算机上的操作的&#xff0c;比如显示出一张“E”的字符。最后总结了计算机编程的本质&#xff0c;就是人们是通过设计&#xff0c;让字节代表不…