Python VIP 付费漫画,无需充值随便霍霍,零基础也能学会!

news2024/11/15 1:57:18

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码

环境使用:

  • Python 3.10

  • Pycharm

模块使用:

  • requests >>> pip install requests 数据请求模块

  • parsel >>> pip install parsel 数据解析模块

第三方模块安装:

win + R 输入cmd 输入安装命令 pip install 模块名

(如果你觉得安装速度比较慢, 你可以切换国内镜像源)

爬虫流程: 从单个数据到多个数据

一. 数据来源分析
  1. 明确需求: 明确采集的网站以及数据内容

    网址: https://www.mkzhan.com/214062/1025745.html

    数据: 漫画内容 38张漫画内容

  2. 抓包分析: 请求那个网址, 能够得到这38张图

    • 打开开发者工具: F12 / 右键点击检查选择 network (网络)

    • 刷新网页

    • 找到漫画图片链接: 点击Img (图片)

      单张地址: https://content.mkzcdn.com/image/20230804/64cccfe2ae025-800x1508.jpg!page-800-x?auth_key=1701173492-0-0-392b7f3719571ef0c99ca254a635aea2

    • 通过关键字去搜索, 找到所有图片对应链接地址

      单章漫画数据包地址: https://comic.mkzcdn.com/chapter/content/v1/?chapter_id=1025745&comic_id=214062&format=1&quality=1&sign=653488115409d382ed7ce4ad472e2074&type=1&uid=67916915

二. 代码实现步骤:
  1. 发送请求 -> 模拟浏览器对于url发送请求

  2. 获取数据 -> 获取服务器返回响应数据 <整个响应数据>

  3. 解析数据 -> 提取所有漫画图片链接

  4. 保存数据 -> 获取漫画内容, 保存本地文件夹中

多章数据采集: 基本的思路流程差不多

核心: 对比请求链接参数变化规律

  • 最终话: https://comic.mkzcdn.com/chapter/content/v1/?chapter_id=1025745&comic_id=214062&format=1&quality=1&sign=653488115409d382ed7ce4ad472e2074&type=1&uid=67916915

  • 630话: https://comic.mkzcdn.com/chapter/content/v1/?chapter_id=1025744&comic_id=214062&format=1&quality=1&sign=653488115409d382ed7ce4ad472e2074&type=1&uid=67916915

chapter_id: 章节ID

获取到整本漫画内容章节ID, 就可以获取整本漫画内容

多个数据采集 -> 某某ID的改变

都可以在目录页面获取到

数据包链接地址: https://www.mkzhan.com/214062/

  1. 发送请求 -> 模拟浏览器对于url发送请求

  2. 获取数据 -> 获取服务器返回响应数据 <整个响应数据>

  3. 解析数据 -> 提取漫画名字 / 章节名字 / 章节ID

整站漫画内容采集: 获取到所有漫画ID即可

代码展示

# 导入数据请求模块 < 第三方 pip install requests >
import requests
# 导入数据解析模块 < 第三方 pip install parsel >
import parsel
# 导入文件操作模块
import os

“”"
发送请求 -> 模拟浏览器对于url发送请求

  1. 模拟浏览器
  2. 请求网址
  3. 发送请求
    • requests.get() 表示使用get请求方法
      “”"
# 模拟浏览器: 请求头 (字典) <复制>
headers = {
    # User-Agent 用户代理 表示浏览器基本身份信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
# 请求链接
link = 'https://www.mkzhan.com/214062/'
# 发送请求
html_data = requests.get(url=link, headers=headers).text

“”"

解析数据 -> 提取漫画名字 / 章节名字 / 章节ID

  • css选择器 根据标签属性提取数据内容

  • xpath 根据标签节点提取数据内容

复制可以使用, 但是不能纯依赖复制 <需要系统学习css和xpath>

“”"

selector = parsel.Selector(html_data)
# 提取漫画名字
name = selector.css('.comic-title::text').get()
# 提取章节ID 章节名字 获取所有li标签
lis = selector.css('.j-chapter-item')

# 自动创建文件夹
filename = f'img\\{name}\\'
if not os.path.exists(filename):
    os.makedirs(filename)

for li in list(reversed(lis)):
    # 提取具体数据 a::attr(data-chapterid) 表示提取A标签里面 data-chapterid 属性
    chapter_id = li.css('a::attr(data-chapterid)').get()
    # a::text 表示提取A标签里面文本内容
    title = li.css('a::text').getall()[-1].strip()
    print(title)
    # 请求网址 <复制>
    url = f'https://comic.mkzcdn.com/chapter/content/v1/?chapter_id={chapter_id}&comic_id=214062&format=1&quality=1&sign=653488115409d382ed7ce4ad472e2074&type=1&uid=67916915'
    # 发送请求 <Response [200]> 响应对象
    response = requests.get(url=url, headers=headers)

“”"

获取数据 -> 获取服务器返回响应数据

  • response.text 获取响应文本数据 <字符串>

  • response.json() 获取响应json数据 <字典>

    数据是花括号包裹 json() 一定要是完整json数据格式

  • response.content 获取响应二进制数据

    图片 视频 音频 特定格式文件… <保存数据>

“”"

    json_data = response.json()

“”"

解析数据 -> 提取所有漫画图片链接

字典取值: 键值对取值

根据冒号左边的内容[键], 提取冒号右边的内容[值]

“”"

    # 提取图片所在列表
    pages = json_data['data']['page']
    print(pages)
    num = 1
    # for循环遍历, 提取每一个图片链接
    for page in pages:
        img = page['image']

“”"

保存数据 -> 获取漫画内容, 保存本地文件夹中

获取漫画内容: 对于漫画图片链接, 发送请求获取二进制数据

“”"

        img_content = requests.get(url=img, headers=headers).content
        # file: 文件路径 文件名字 文件格式 字符串格式化方法
        with open(file=f'{filename}{title}{num}.jpg', mode='wb') as f:
            # w 写入的字符串
            # img_content 二进制数据
            f.write(img_content)
        print(img)
        num += 1

尾语

好了,今天的分享就差不多到这里了!

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

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

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

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

相关文章

【开源】基于Vue+SpringBoot的独居老人物资配送系统

项目编号&#xff1a; S 045 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S045&#xff0c;文末获取源码。} 项目编号&#xff1a;S045&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4…

Embedding压缩之hash embedding

在之前的两篇文章 CTR特征重要性建模&#xff1a;FiBiNet&FiBiNet模型、CTR特征建模&#xff1a;ContextNet & MaskNet中&#xff0c;阐述了特征建模的重要性&#xff0c;并且介绍了一些微博在特征建模方面的研究实践&#xff0c;再次以下面这张图引出今天的主题&#…

销售客户分配管理细则

随着市场竞争的不断加剧&#xff0c;销售团队的有效管理变得愈发重要。其中&#xff0c;客户分配是销售团队成功的关键之一。一个科学合理的销售客户分配管理细则不仅可以提高销售团队的整体工作效率&#xff0c;还能够优化客户体验&#xff0c;促使销售业绩持续增长。下面是一…

Jmeter接口测试:jmeter_逻辑控制器_随机控制器随机顺序控制器

随机控制器 当该控制器下有多个子项时&#xff0c;每次循环会随机执行其中一个 Ignore sub-controller block&#xff08;忽略子控制器模块&#xff09; 如果勾选了此项&#xff0c;随机控制器下的子控制器中的多个子项只会被执行一个 随机顺序控制器 当该控制器下有多个子项…

5. 文件属性和目录

5. 文件属性和目录 1. Linux 系统的文件类型1.1 普通文件1.2 目录文件1.3 字符设备文件和块设备文件1.4 符号链接文件1.5 管道文件1.6 套接字文件 2. stat 系统调用2.1 struct stat 结构体2.2 st_mode 变量2.3 struct timespec 结构体 3. fstat 和 lstat 函数3.1 fstat 函数3.2…

反欺诈指南:东南亚数字经济反欺诈注意事项

目录 东南亚各类网络欺诈肆虐 科技助力东南亚反欺诈 东南亚做反欺诈需要注意四个方面 据谷歌、淡马锡和贝恩公司发布的一份报告显示&#xff0c;尽管东南亚地区的经济增长有所放缓&#xff0c;但2023年数字经济仍预计创造约100亿美元的收入&#xff0c;数字支付占该地区总交易额…

石油化工隐蔽设备AR可视化检修协助系统让新手也能轻松上岗

随着城市基础设施建设的不断推进&#xff0c;地下管线巡检工作的重要性日益凸显。传统的巡检方法已无法满足现代都市的高效运营需求。此时&#xff0c;地下管线AR智慧巡检远程协助系统应运而生&#xff0c;凭借其独特的特点与优势&#xff0c;为城市地下管线巡检带来了革命性的…

98.套接字-Socket网络编程1(基础概念)

目录 1.局域网和广域网 2.IP 互联网协议(Internet Protocol) IP的作用 3.查看IP地址 Windows上查看IP ​编辑 Linux上查看IP 4.端口 主要类型&#xff1a; 用途&#xff1a; 示例&#xff1a; 端口的表示&#xff1a; 5.OSI/ISO 网络分层模型 1.局域网和广域网 …

《C++ Primer》第10章 算法(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 10.4 再探迭代器&#xff08;P357&#xff09; 除了为每个容器定义的迭代器外&#xff0c;头文件 iterator 中还定义了额外的几种迭代器&#xff1a; 插入迭代器&#xff08;insert iterator&#xff09;&…

Selenium定位元素的方法css和xpath的区别!

selenium是一种自动化测试工具&#xff0c;它可以通过不同的定位方式来识别网页上的元素&#xff0c;如id、name、class、tag、link text、partial link text、css和xpath。 css和xpath是两种常用的定位方式&#xff0c;它们都可以通过元素的属性或者层级关系来定位元素&#…

【UE】UEC++委托代理

【UE】UEC委托代理 一、委托的声明与定义 #pragma once#include "CoreMinimal.h" #include "GameFramework/GameModeBase.h" #include "DelegateGameMode.generated.h"// // Declare DECLARE_DELEGATE // DECLARE_DELEGATE(FDeclareDelegate_…

Python中的Slice函数:灵活而强大的序列切片技术

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python中的Slice函数是一种强大且灵活的序列切片技术&#xff0c;用于从字符串、列表、元组等序列类型中提取子集。本文将深入研究Slice函数的功能和用法&#xff0c;提供详细的示例代码和解释&#xff0c;帮助读…

java操作windows系统功能案例(一)

下面是一个Java操作Windows系统功能的简单案例&#xff1a; 获取系统信息&#xff1a; import java.util.Properties;public class SystemInfo {public static void main(String[] args) {Properties properties System.getProperties();properties.list(System.out);} }该程…

【智能家居】三、添加语音识别模块的串口读取功能点

语音识别模块SU-03T 串口通信线程控制代码 inputCommand.h&#xff08;输入控制指令&#xff09;voiceControl.c&#xff08;语音控制模块指令&#xff09;main.c&#xff08;主函数&#xff09;编译运行结果 语音识别模块SU-03T AI智能语音识别模块离线语音控制模块语音识别…

以STM32CubeMX创建DSP库工程方法一

以STM32CubeMX创建DSP库工程方法 略过时钟树的分配和UART的创建等&#xff0c;直接进入主题生成工程文件 它们中的文件功能如下&#xff1a; 1&#xff09;BasicMathFunctions 基本数学函数&#xff1a;提供浮点数的各种基本运算函数&#xff0c;如向量加减乘除等运算。 2&…

基于SSM框架的餐馆点餐系统的设计

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

11.30 C++类特殊成员函数

#include <iostream>using namespace std; class Per { private:string name;int age;double *high;double weight; public://构造函数Per(string name,int age,double high,double weight):name(name),age(age),high(new double(high)),weight(weight){cout << &q…

ECONGU4280 Corporate Finance

ECONGU4280 Corporate Finance WeChat: zh6-86

Linux系统编程 day07 信号

Linux系统编程 day07 信号 1. 信号的介绍以及信号的机制2. 信号相关函数2.1 signal2.2 kill2.3 abort和raise2.4 alarm2.5 setitimer 3. 信号集4. 信号捕捉函数6. SIGCHLD信号7. SIGUSR1与SIGUSR2 1. 信号的介绍以及信号的机制 信号是信息的载体&#xff0c;在Linux/Unix环境下…

对话 AI for Science 先行者,如何抓住科研范式新机遇?丨和鲸社区2023年度科研闭门会

2023年3月&#xff0c;科技部会同自然科学基金委启动了 AI for Science 的专项部署工作。数据驱动的科学研究长期以来面临着诸多困境&#xff0c;针对传统科研工作流中过度依赖人类专家经验与体力的局限性&#xff0c;AI for Science 旨在基于科学数据与算力支撑&#xff0c;通…