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

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

本案列中所使用的模块:

  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键 缩进代码 后面再改个参数就完成咯

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

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

相关推荐
前端精髓9 小时前
结构化输出with_structured_output(抽卡)
python·langchain
尹人入圣10 小时前
目前热门的IP驱动产业新场景新工具
网络·python·网络协议·tcp/ip
Nuanyt10 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
吴卫斌10 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
2601_9679873711 小时前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
专注仿真13 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放13 小时前
Python基础语法练习题(75)
开发语言·python·学习
黑十14 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
threelab15 小时前
开源图片去水印代码
python
taller_200016 小时前
【012】数据类型入门: Excel 数据到 Python 值的转换
python·excel·pie·py