当前位置:
首页 > Python基础教程 >
-
50行Python代码实现自动下载小说,并打包exe直接运行!
要准备的东西
软件
python 3.8
pycharm
使用的模块
requests >>> pip install requests 数据请求 parsel >>> pip install parsel 数据解析 (完善功能) 添加搜索功能 搜索小说名字或者作者名字 tqdm >>> pip install tqdm 下载进度条显示模块 # Python学习交流群:924040232 pandas >>> pip install pandas 输入的格式好看一些
win + R 输入cmd 输入安装命令 pip install 模块名 ;
如果出现爆红,可能是因为,网络连接超时,切换国内镜像源;
黄色是警告 ,可以忽略;
输入小说名下载
打包成exe程序, 是需要安装 pyinstaller ,命令提示符窗口输入 pip install pyinstaller
打包命令:pyinstaller -F -w 加上文件名(如:123.py)
代码展示
下方我会放上视频,可以对照视频讲解的更加清楚。
# 导入数据请求模块 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('<h1>(.*?)</h1>', response.text)[0] novel_info = re.findall('<dd><a href="(.*?)" >(.*?)</a></dd>', 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]> 返回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('//*[@class="bookname"]/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('请正确输入小说名字或者作者名字 / 没有这本书的数据..')
出处:https://www.cnblogs.com/hahaa/p/15927541.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式