首页 > 编程语言 >Python爬虫获取B站漫画

Python爬虫获取B站漫画

时间:2024-06-16 18:58:48浏览次数:27  
标签:... Python 爬虫 爬取 headers url 漫画 id 图片

《眼儿媚·朦胧雾》

身世飘零叹孤独 回顾盼相扶 情天不老 雷霆易逝 雨过云舒

相思不忍轻离别 携手更如初 风急波涌 扁舟不系 终恋江湖

最近有妖气上《鬼刀》停止更新了,Bilibili漫画上的又不能下载保存到本地,加上最近正在玩StyleGANs,需要一些动漫图片做训练数据集,所以搞个爬虫从Bilibili漫画上爬了个《鬼刀》全集。

工程师的乐趣就是这么简单!

本文介绍一下爬取的方法。

话说,《鬼刀》的画作真实细腻到极致了,王凌真是吾辈程序员楷模,作者目前也在学画画,道阻且长啊。

爬取彼岸图网的爬虫:

Python爬虫爬取彼岸图网4K图片-CSDN博客

爬取百度图片的爬虫:

百度图片爬虫-CSDN博客

首先,这是爬取成果:

 

 

本文以《鬼刀》为爬取目标,其他漫画可以此类推。

目录:

1.网页分析;

2.XHR解析;

3.爬取流程;

4.魔高一丈之反反扒

1.网页分析

基础url:https://manga.bilibili.com/mc29481/553155?from=manga_detail

这个网址中关键的是两个字符串:“mc29481”和“553155”,前者是《鬼刀》的漫画编号,后者是章节编号,553155是第0画,553156是第1画,但是........以此不类推,章节编号没有规律,这也算是一种反扒策略吧。

按F12进入开发者工具 -> 选择network -> 选择XHR,如下图:

漫画图片是通过Ajax动态加载的,这里关键的请求有3个:GetImageIndex...,ImageToken...和ComicDetail.....,这3个都是POST请求,从中得到漫画图片的真正url。

2.XHR解析

首先看ComicDetail.....

可以得到所有的ep_id,即章节编号,这个是倒序排列的,第一个代表最后一话。

然后看GetImageIndex...

请求参数ep_id是章节编号,响应数据是一堆JSON数据,其中的‘/bfs/manga........jpg’是需要的图片基础路径。

这个数据需要做一些处理作为ImageToken...的请求输入

最后是ImageToken...:

ImageToken...的请求输入是之前GetImageIndex...得到的/bfs/manga........jpg’添加一些字符串,如上图所示。

Note:这里有一个问题,这里的"@1100W"在不同的章节里是不同的,以鬼刀为例,有些是"@1100W"有些是"@1088W",且没有规律,这个字符串不知道从哪获取,作者在XHR对象里没有找到,在HTML里倒有,但这个HTML也是动态加载的,但是,不影响爬取,无论是"@1100W"还是“@1088”都可以正常爬取,这个值影响获取的图片的宽度,"@1100W"代表图片宽度尺寸1100,作者使用7000,得到的图片宽最大为2500,这个应该是最大值了。

最后得到漫画图片的真实url:

使用这个url发送GET请求,即可得到漫画图片。

3.爬取流程

第一步,得到所有ep_id:

url      = 'https://manga.bilibili.com/twirp/comic.v1.Comic/ComicDetail?device=pc&platform=web'
comic_id = 29481

response = requests.post(url=url, headers=headers_id, json=data).json()

headers从网页上照抄:

data为漫画编号即Comic_id:

获得所有ep_id:

第二步,获得图片基础路径:

url     = 'https://manga.bilibili.com/twirp/comic.v1.Comic/GetImageIndex?device=pc&platform=web'
request = requests.post(url=url, headers=headers_path, json=data).json()

headers从网页上照抄,要改两个地方:

1.'accept-encoding' 需要注释掉,不然会报错,原因不明;

2.'referer'需要根据ep_id重新生成;

data为漫画章节号即ep_id:

获得该章节的所有图片基础路径:

第三步,根据得到的基础路径生成完整路径,然后获得图片url:

完整路径如上图,至于“@1100”目前暂未解决,由于《鬼刀》里的所有图片都是“@1100”或者“@1088”,所以本文使用笨办法,使用两种字符串各发起一次请求,使用"try...except"跳过错误。

headers从网页上照抄,要改两个地方:

1.'accept-encoding' 需要注释掉,不然会报错,原因不明;

2.'referer'需要根据ep_id重新生成;

根据返回的json文件,获得图片下载url:

第四步,使用图片url通过Get请求下载图片。大功完成!!!

4.魔高一丈之反反扒

针对B站漫画的反爬技术,使用了一些反反爬策略,本文爬取过程中没有被反爬过!

1.headers,POST请求时需要写全(有些参数需要注释掉),GET请求不能写全;

2.随机休息,时间可以长一点;

time.sleep(random.randint(5, 20))

3.headers里随机更换浏览器;

4.使用代理IP;

有空再做个软件界面封装一下。

最经有没有什么好看国漫推荐的啊,另外据说鬼刀要动画化了。

标签:...,Python,爬虫,爬取,headers,url,漫画,id,图片
From: https://blog.csdn.net/m0_59092412/article/details/139709875

相关文章

  • python IP 端口 socket tcp 介绍
    IP端口介绍1、IPIP地址是分配给网络设备上网使用的数字标签,它能够标识网络中唯一的一台设备windows环境可以使用ipconfig来查看自己的iplinux环境可以使用ifconfig来查看自己的ip2、端口端口是传输数据的通道,每个操作系统上都有65535个端口,通过对应的端口号把数......
  • Web爬虫-edu_SRC-目标列表爬取
    免责声明:本文仅做技术交流与学习...爬取后,结合暗黑搜索引擎等等进行进一步搜索.edu_src.pyimportrequests,timefrombs4importBeautifulSoupforiinrange(1,20):url=f'https://src.sjtu.edu.cn/rank/firm/0/?page={i}'print(f"正在获取第{i}页......
  • 类对象属性(python练习)
    编写一个程序来创建一个类并使用该类的方法来打印属性。创建一个类:创建自行车Bicycle类。在类中,创建两个方法:__init__()和print_attributes()。类有两个属性:gear'和speed,它们应该在init()`中初始化。在print_attributes()方法中,将gear属性和speed属性分别打印在两行。在类......
  • 【华为OD】D卷真题200分:数字游戏 python代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客JS、Java、C、python、C++代码实现:【华为OD】D卷真题200分:数字游戏JavaScript代码实现[思路+代码]-CSDN......
  • 16个免费学习Python的网站和教程(2024年最新资源)
    16个免费学习Python的网站和教程(2024年最新资源)博主猫头虎的技术世界......
  • Python爬虫之路(12)--re正则表达式
    正则表达式认识正则正则表达式,又称规则表达式,(RegularExpression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个语法规则的......
  • Python爬虫入门与实践
    在当今的互联网时代,网络爬虫已经成为获取网络数据的重要工具。Python作为一种强大的编程语言,其简洁易读和丰富的库支持使得它成为爬虫开发的首选语言。本文将带你入门Python爬虫,并通过一个简单的示例来展示如何使用Python爬取网页数据。一、Python爬虫基础Python爬虫通常包括......
  • 【Python入门与进阶】综合练习题:学生成绩管理系统
    综合练习题:学生成绩管理系统题目描述:请你设计一个简单的学生成绩管理系统,要求能够进行以下操作:添加学生信息(包括姓名和学号)添加学生的成绩(包括科目和成绩)查询学生的平均成绩打印所有学生的成绩单解题思路:定义类:创建一个Student类,包含以下属性:name:学生姓名i......
  • 2023海南素养赛Python复赛卷
    第1题,整数加8题目描述:输入一个整数,输出这个整数加8的结果输入描述:输入一行一个正整数。输出描述:输出求和的结果。样例1:输入:5输出:13第2题,哼哈二将题目描述:哼哈二将,形象威武凶猛,一名能鼻哼白气制敌,一名能口哈黄气擒将。这样一次"哼哈”就可以消灭一个敌人,现在......
  • Python在SQLite中的应用:从入门到进阶
    Python在SQLite中的应用:从入门到进阶Python作为一门高效、灵活的编程语言,广泛应用于各种数据处理和分析任务。而SQLite是一种轻量级的数据库管理系统,特别适合于嵌入式应用和小型项目。在本篇博文中,我们将深入探讨Python在SQLite中的应用,帮助读者从零开始,逐步掌握这项技能。......