爬虫基础之爬取 某漫画网站

网站: 漫画大全_漫画分类检索_好看的漫画 - 漫客栈

本案列中所使用的模块:

  1. requests
  2. re
  3. lxml from lxml import etree

分析步骤:

1.选择一本漫画打开

2.接着打开我们的开发者工具 F12 or 右击鼠标

因为漫画是图片形式存在的 点击 过滤图片数据

在左下角数据报中 找到我们的漫画图片 有很多都是左侧栏中的图片

发现这两个比较长的是漫画数据

3.接着我们将图片的url地址复制一段去搜索包含整个章节的漫画地址

Ctrl+F 快速打开搜索框 输入复制的一段链接 可以看到返回出来的两个接口 最后一个为漫画接口

可以复制里面的url到浏览器查看是否为漫画图片 图片的数量也可以对得上

5.接着点击标头就可以看到基本的请求信息 包括请求头 请求体 url地址

采集步骤:

一. 发送请求 模拟浏览器向服务器发送请求

python 复制代码
#使用第三方模块requests​
#在pycharm终端 执行如下指令即可 安装
#pip install requests
#复制标头里面的url地址 后面的参数可以不用复制

url = 'https://comic.mkzcdn.com/chapter/content/v1/?chapter_id=476064&comic_id=207622&format=1&quality=1&type=1'
#模拟浏览器向服务器发送请求
headers = {
    'user-agent':   #用户代理  表示浏览器基本的身份信息
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'
}
# 之前看到预览中的数据格式为JSON 因此直接获取JSON 格式即可
​resp = requests.get(url,headers=headers).json
pprint.pprint(resp)

带花括号的为JSON 格式的数据

我们返回的数据是JSON 格式的 有个模块可以进行json 格式的格式化使其代码方便观看

import pprint

运行完就可以看到我们想要的数据了

二. 解析数据 通过图片所在的page列表 键值对取值

python 复制代码
#  提取图片所在的page列表
json_data = resp['data']['page']
# 循坏遍历
for page in json_data:
    # 对图片链接进行取值
    img = page['image']
    print(img)

运行后的结果图

三. 保存数据 请求图片的URL地址保存二进制数据

python 复制代码
#定义一个变量方便后续保存图片
num = 1
for page in json_data:
    img = page['image']
    # 对图片的地址发送请求
    img_content = requests.get(url=img,headers=headers).content
    # 保存数据 以二进制形式
    with open('img\\'+str(num)+'.jpg','wb') as f:
        f.write(img_content)
        num+=1
        print(f"第{num}张图片正在保存")

运行结果

对此 单个章节的数据采集完毕

批量数据的采集:

分析变化的数据:

不同的章节参数对比图 可以发现就第一个参数不一样 章节的id

之前的数据包中有我们所需要的page_id 请求此数据包拿到id

直接搜索id 在返回的接口中找到想要的id

python 复制代码
all_url = 'https://comic.mkzcdn.com/chapter/v1/?comic_id=207622'
# 发送请求
# 得到json 数据
resp = requests.get(url=all_url, headers=headers).json()
# 提取数据
link_json = resp['data']
# for循坏遍历数据 把之前的for循坏嵌套进来
for link in link_json:
    #    提取章节ID
    ID = link['chapter_id']
#     提取章节名字
    Name = link['title']
    pprint.pprint(link_json)
# 将里面的参数进行替换
    url = f'https://comic.mkzcdn.com/chapter/content/v1/?chapter_id={ID}&comic_id=207622&format=1&quality=1&type=1'
#这样就可以进行 多个章节的爬取了

可能在爬取个别章节的时候 章节名中可能出现特殊字符 将会报错 这时候我们可以使用re 正则来替换

python 复制代码
#导入re
import re
fi_name = re.sub(r'[\\/:*?<>|]','',Name)

最后的结果 正本的章节内容都可以爬取

至于多本漫画的爬取

可以在根目录 打开开发者工具 搜索漫画的名字对比 不同点

做法:

获取该数据包的url地址 向此地址发送请求 拿到所有的书id

采用正则 去提取静态页面中的数据

python 复制代码
# 拿到地址
init_url = 'https://www.mkzhan.com/category/'
# 发送请求
re_text = requests.get(url=init_url, headers=headers).text
# 获取数据
html_text = etree.HTML(re_text)
# 提取数据
all_href = html_text.xpath("//*[@class='cover']/@href")
for href in all_href:
    # 处理数据 转换成字符串类型数据 替换多余的字符 只要纯数字
    fi_href = ''.join(href).replace('/','')
    print(fi_href)

再嵌套一层循坏就可以啦 选中后面的数据 按Tab键 缩进代码 后面再改个参数就完成咯

本次的案例分享就到这里 感谢大家的观看!

后续会持续更新 点个关注不迷路 谢谢

相关推荐
凌肖战5 分钟前
python3中的字典推导式
python
豌豆花下猫11 分钟前
Python 潮流周刊#84:2024 年 Python 的最佳实践(摘要)
后端·python·ai
cv小白菜13 分钟前
容器化部署算法服务技术文档
python·ubuntu·docker
清弦墨客15 分钟前
【机器学习】交叉验证:数据世界的“多面侦探”
人工智能·python·机器学习
Jiangnan_Cai1 小时前
【图像处理】OpenCv + Python 实现 Photoshop 中的色彩平衡功能
图像处理·python·opencv·photoshop
zhangfeng11331 小时前
2025年最新 Tensorflow paddlepaddle与CUDA 、Python、cuDNN的版本对应表 一一对应关系,torch和CUDA的对应表
人工智能·python·tensorflow
小爬虫程序猿2 小时前
爬虫代码中如何添加异常处理?
爬虫
single_ffish2 小时前
数据挖掘入门介绍及代码实战
人工智能·爬虫·python·数据挖掘
投资小箱子2 小时前
如何使用api接口
大数据·python·fastapi
木觞清2 小时前
Python 图像处理:生成美丽的书籍封面
开发语言·python