Python实现番茄小说内容下载

news2024/11/20 23:25:57

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

环境使用:

  • Python 3.8

  • Pycharm

模块使用:

  • requests --> pip install requests

  • re

  • parsel

代码展示:

导入模块

# 导入数据请求模块
import requests
# 导入正则表达式模块
import re
# 导入数据解析模块
import parsel
from prettytable import PrettyTable
from tqdm import tqdm

模拟浏览器

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
while True:
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
    }
    """实现搜索下载功能"""
    key = input('请输入你要下载的小说: 输入00退出 ')
    if key == '00':
        break
    tb = PrettyTable()
    tb.field_names = ['序号', '书名', '作者', '类型', '最新章节', 'ID']
    num = 0
    info = []
    print('正在检索中, 请稍后.....')
    for page in tqdm(range(30)):
    
        search_url = 'https://fanqienovel.com/api/author/search/search_book/v1'
        # 请求参数
        search_params = {
            'filter': '127,127,127,127',
            'page_count': '10',
            'page_index': page,
            'query_type': '0',
            'query_word': key,
        }
        # 发送请求
        search_data = requests.get(url=search_url, params=search_params, headers=headers).json()
        for i in search_data['data']['search_book_data_list']:
            book_name = i['book_name']
            author = i['author']
            book_id = i['book_id']
            category = i['category']
            last_chapter_title = i['last_chapter_title']
            dit = {
                'book_name': book_name,
                'author': author,
                'category': category,
                'last_chapter_title': last_chapter_title,
                'book_id': book_id,
            }
            info.append(dit)
            tb.add_row([num, book_name, author, category, last_chapter_title, book_id])
            num += 1

    print(tb)
    book = input('请输入你要下载小说序号: ')
"""获取小说名字以及章节ID"""
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
    # 请求链接
    url = f'https://fanqienovel.com/page/{info[int(book)]["book_id"]}'
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 获取网页源代码  html字符串数据
    html_data = response.text
    # 正则提取小说名
    name = re.findall('<div class="info-name"><h1>(.*?)</h1', html_data)[0]
    # 把获取到html字符串数据,转成可解析对象
    selector = parsel.Selector(html_data)
    # css选择器提取小说名
    css_name = selector.css('.info-name h1::text').get()
    # 提取章节ID
    href = selector.css('.chapter-item a::attr(href)').getall()
    print(f'{name}, 小说正在下载, 请稍后....')
    # for循环遍历提取列表里面元素
    for index in tqdm(href):
        # 字符串分割提取ID -> 列表
        chapter_id = index.split('/')[-1]
        # 构建小说数据链接地址
        link = f'https://novel.snssdk.com/api/novel/book/reader/full/v1/?device_platform=android&parent_enterfrom=novel_channel_search.tab.&aid=2329&platform_id=1&group_id={chapter_id}&item_id={chapter_id}'
        # 对于内容链接地址发送请求, 获取数据
        json_data = requests.get(url=link, headers=headers).json()['data']['content']
        # 提取章节标题名
        title = re.findall('<div class="tt-title">(.*?)</div>', json_data)[0]
        # 提取小说内容 -> 列表合并成字符串
        content = '\n'.join(re.findall('<p>(.*?)</p>', json_data))
        # 保存小说内容
        with open(f'{name}.txt', mode='a', encoding='utf-8') as f:
            """
            第一章 章节名
            小说内容
            第二章 章节名
            小说内容
            """
            f.write(title)
            f.write('\n')
            f.write(content)
            f.write('\n')
"""
解析数据方法:
    re: 直接对于字符串数据进行解析提取
        - re.findall()
            返回列表
    css: 根据标签属性提取数据
        - 找到对应数据标签位置
            .info-name h1 -> 定位class类名为info-name下面h1标签
    xpath: 根据标签节点提取数据
        xpath_name = selector.xpath('//*[@class="info-name"]/h1/text()').get()
"""

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

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

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

相关文章

[自定义 Vue 组件] 小尾巴 Logo 组件 TailLogo

文字归档于&#xff1a;https://www.yuque.com/u27599042/coding_star/apt6y731ybmxgu5g 组件效果 组件依赖 自定义字符串工具函数 stringIsNull https://www.yuque.com/u27599042/coding_star/slncupw7un3ce7cb import {stringIsNull} from "/utils/string_utils.js&q…

python进制和编码

一、进制 计算机中底层所有的数据都是以 010101的形式存在&#xff08;图片、文本、视频等&#xff09;。 二、进制转换 v1 bin(25) # 十进制转换为二进制 print(v1) # "0b11001"v2 oct(23) # 十进制转换为八进制 print(v2) # "0o27"v3 hex(28) # 十进…

ThinkPHP 8.x MVC 数据库用户增加功能demo实现

ThinkPHP MVC 数据库用户增加功能实现 在thinkphp 多应用的项目中&#xff0c; 采用MVC的架构实现 增加用户的功能。 在多应用下的controller下创建UserInfo.php ,创建一个和用户信息相关操作的控制器。 定义一个插入信息的方法,这里叫insertUserInfo 我们要执行一个用户插入…

Apache Doris (四十五): Doris数据更新与删除 - Sequence 列

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 基本原理

EtherNet/IP转Modbus TCP协议网关的接口

远创智控的YC-EIPM-TCP网关产品&#xff0c;它有什么作用呢&#xff1f;一起来了解一下吧&#xff01; 远创智控YC-EIPM-TCP网关产品可以通过各种数据接口和工业领域的仪表、PLC、计量设备等产品连接&#xff0c;实时采集这些设备中的运行数据、状态数据等信息&#xff0c;并把…

数字秒表verilog电子秒表跑表,代码/视频

名称&#xff1a;数字秒表verilog电子秒表跑表 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 设计电子秒表&#xff0c;秒表时间精确到0.01秒&#xff0c;可通过按键控制秒表启动、暂停、复位。 代码需要在Mini_Star开发板验证。 开发板资料&…

【springboot异常处理】

这里写自定义目录标题 1&#xff0c;Java Servlet规范异常处理触发异常 2&#xff0c;tomcat 异常处理实现tomcat请求处理流程异常发生时核心处理类 3&#xff0c;springmvc 异常定制以及扩展请求处理流程使用ControllerAdvice & ExceptionHandler 配置全局异常处理器未配置…

全面的Docker快速入门教程

前言&#xff1a; 都2023年了&#xff0c;你还在为了安装一个开发或者部署环境、软件而花费半天的时间吗&#xff1f;你还在解决开发环境能够正常访问&#xff0c;而发布正式环境无法正常访问的问题吗&#xff1f;你还在为持续集成和持续交付&#xff08;CI / CD&#xff09;工…

【C++11】右值引用、移动构造、移动赋值、完美转发 的原理介绍

文章目录 一、概念1.1 左值1.2 左值引用1.3 什么是右值&#xff1f;1.4 什么是右值引用&#xff1f;对于参数左值还是右值的不同&#xff0c;是被重载支持的左值引用的使用场景 和 缺陷 二、移动语义2.1 移动拷贝构造2.2 移动赋值 三、右值引用 与 STL3.1 移动拷贝构造 和 赋值…

Web攻防03_MySQL注入_数据请求

文章目录 PHP-MYSQL-数据请求类型1、数字型(无符号干扰)2、字符型&#xff08;有符号干扰&#xff09;3、搜索型&#xff08;有多符号干扰&#xff09;4、框架型&#xff08;有各种符号干扰&#xff09; PHP-MYSQL-数据请求方法数据请求方法GET&#xff1a;POST&#xff1a;Coo…

运筹系列86:MIP问题的建模tips

1. Either-or constraint 添加辅助变量y。 比如 Either 3 x 1 2 x 2 ≤ 18 3x_12x_2 \le 18 3x1​2x2​≤18 or x 1 4 x 2 ≤ 16 x_14x_2 \le 16 x1​4x2​≤16 可以用 3 x 1 2 x 2 ≤ 18 M y 3x_12x_2 \le 18My 3x1​2x2​≤18My x 1 4 x 2 ≤ 16 M ( 1 − y ) x_1…

【vue】el-carousel实现视频自动播放与自动切换到下一个视频功能:

文章目录 一、原因:二、实现代码:三、遇到的问题&#xff1a;【1】问题&#xff1a;el-carousel页面的视频不更新【2】问题&#xff1a;多按几次左按钮&#xff0c;其中跳过没有播放的视频没有销毁&#xff0c;造成再次自动播放时会跳页 一、原因: 由于后端无法实现将多条视频拼…

2023年:哪些Trello的替代品值得关注?

你还记得你的第一块Trello板吗&#xff1f;它可能帮助你记录了大学申请、培训目标&#xff0c;甚至是圣诞礼物这些待办事项。对于我们中的许多人来说&#xff0c;Trello 是我们尝试的第一个工作管理工具。无论是跟踪高中作业&#xff0c;组织家庭任务&#xff0c;还是可视化工作…

瑞芯微RKNN开发·yolov5

官方预训练模型转换 下载yolov5-v6.0分支源码解压到本地&#xff0c;并配置基础运行环境。下载官方预训练模型 yolov5n.ptyolov5s.ptyolov5m.pt… 进入yolov5-6.0目录下&#xff0c;新建文件夹weights&#xff0c;并将步骤2中下载的权重文件放进去。修改models/yolo.py文件 …

【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

文章目录 一、public 公有继承 - 示例分析1、类型兼容性原则2、类型兼容性原则应用场景 二、类型兼容性原则 - 示例分析1、父类指针 指向 子类对象2、使用 子类对象 为 父类对象 进行初始化3、完整代码示例 一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 :…

测试开发之性能篇 —— 性能测试设计

很多朋友接触性能测试是从工具开始的&#xff0c;比如流行的JMeter、Loadrunner等。熟悉一个测试工具&#xff0c;有助于对性能测试的过程、方法和机制有个直观的理解。 我们知道&#xff0c;无论是什么类型的测试&#xff0c;其目标不外乎两个&#xff0c;一是为了证明系统满…

直播带货前途渺茫了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 种种迹象表明电商行业和直播带货将受到冲击。直播带货前途渺茫了&#xff0c;相信很快就有政策出来了&#xff0c;针对电商这块的&#xff0c;支持实体、支持取消直播带货。 (1)目前&#xff0c;…

C++对多继承的理解

学到C时我们知道了继承但是一般都是使用单继承为主&#xff0c;单继承就是一个子类只能继承一个父类而多继承是指一个子类可以同时继承多个父类。 菱形继承 菱形继承是多继承中的一个特殊情况。当一个子类同时继承两个具有共同父类的类时&#xff0c;就会出现菱形继承问题。但…

2 spring 识别自定义实现BeanFactoryPostProcessor 的接口

如果自定义实现了BeanFactoryPostProcessor接口&#xff0c;那么想让spring识别到的话&#xff0c;有两种方式&#xff1a; 1 定义在spring的配置文件中&#xff0c;让spring自动识别 2 调用具体的addBeanFactoryPostProcessor方法 方法1 的代码实现 定义实现BeanFactoryPo…

淘宝拍立淘接口,按图搜索商品接口,图片识别接口,图片上传搜索接口,图片搜索API接口,以图搜货接口

淘宝拍立淘图片搜索接口可以通过上传或输入图片链接的方式&#xff0c;调用淘宝的图片搜索引擎&#xff0c;返回与该图片相关的所有淘宝商品。 使用该接口需要先申请淘宝开放平台的App Key和App Secret&#xff0c;获取相应的API访问权限。在调用接口时&#xff0c;需要传入商…