当前位置: 首页 > article >正文

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

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

本案列中所使用的模块:

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

分析步骤:

1.选择一本漫画打开

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

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

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

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

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

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

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

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

采集步骤:

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

#使用第三方模块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列表 键值对取值

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

运行后的结果图 

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

#定义一个变量方便后续保存图片
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

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  正则来替换

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

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

至于多本漫画的爬取

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

做法:

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

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

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

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

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


http://www.kler.cn/a/459074.html

相关文章:

  • [极客大挑战 2019]Http 1
  • sqlite3 python如何查表结构
  • 怎样在 Word 文档中插入附件(其他文件)?
  • 【网络安全实验室】SQL注入实战详情
  • 人工智能机器学习基础篇】——深入详解强化学习 基础知识,理解马尔可夫决策过程(MDP)、策略、价值函数等关键概念
  • Linux内核修改内存分配策略
  • 前端Python应用指南(七)使用SQLAlchemy与Django ORM:数据库操作的Python实践
  • 大数据-264 实时数仓 - Canal MySQL的binlog研究 存储目录 变动信息 配置MySQL
  • 论文笔记PhotoReg: Photometrically Registering 3D Gaussian Splatting Models
  • 【Unity功能集】TextureShop纹理工坊(七)魔棒工具
  • 深入浅出:从入门到精通大模型Prompt、SFT、RAG、Infer、Deploy、Agent
  • JavaFX与Gradle版本兼容指南
  • leecode213.打家劫舍||
  • Android 源码阅读随笔(一)—— 下载源码
  • git自动压缩提交的脚本
  • python制作打字小游戏
  • 图文检索(37):局部对齐Stacked Cross Attention for Image-Text Matching
  • GPU 进阶笔记(二):华为昇腾 910B GPU
  • 【从0到0.5】基于STM32F427+DP83848+FreeRTOS+LWIP+CubeMx+Keil搭建TCP服务端与客户端
  • 基于JDK 17 编写的Java常用工具类
  • Docker+Portainer 离线安装
  • 数学建模助力干细胞研究,配体纳米簇如何影响干细胞命运
  • 排序算法简单问题(Java)
  • Axture 实现一个简单的父子菜单
  • win32汇编环境下,提取对话框程序中,listview列表控件里的内容示例
  • ES IK分词字典热更新