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

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

本案列中所使用的模块:

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

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

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

相关推荐
橘猫云计算机设计31 分钟前
基于django优秀少儿图书推荐网(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·小程序·django·毕业设计
互联网杂货铺38 分钟前
如何用Postman实现自动化测试?
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
予安灵1 小时前
一文详细讲解Python(详细版一篇学会Python基础和网络安全)
开发语言·python
冷月半明1 小时前
Python项目打包指南:PyInstaller与SeleniumWire的兼容性挑战及解决方案
python·selenium
冷月半明1 小时前
《Pandas 性能优化:向量化操作 vs. Swifter 加速,谁才是大数据处理的救星?》
python·数据分析·pandas
蹦蹦跳跳真可爱5891 小时前
Python----机器学习(基于PyTorch的线性回归)
人工智能·pytorch·python·机器学习·线性回归
hljqfl1 小时前
pip安装第三方库,但PyCharm中却无法识别
ide·pycharm·pip
不靠谱程序员1 小时前
"白描APP" OCR 软件 API 逆向抓取
后端·爬虫
搞不懂语言的程序员2 小时前
装饰器模式详解
开发语言·python·装饰器模式
mosquito_lover12 小时前
矿山边坡监测预警系统设计
人工智能·python·深度学习·神经网络·视觉检测