终于,我用Python爬虫批量保存了P站的靓图
今天我决定爬虫下 P站的图片,我们首先打开网站研究下。
不好意思,手抖打错了,应该是下面这个网站。
众所周知,插图网站 pixiv 别名叫 P站,所以今天我用爬虫批量保存二次元P站的靓图。
P站主要分为四个模块,插画、动图、漫画、小说,小说和漫画都是日文,看不懂,所以今天的目标就是插画和动图了。
今天就以插画为例,进入插画模块,我们先找到怎么下载单张插画的图片的方法,我们打开 F12 进入 Network,发现这个页面会返回每个插画的 id。
点击单个插画进入到插画具体页面,看到网址就是上一个网页的 id 拼接而成的。
我们打开详情页的源代码,在 link 标签里有个 href 链接,我们点击进入。
进来之后我们发现里面都是关于这张插画图片的详情信息,包括插画标题、插画高度和宽度等,url 应该就是插画的可下载链接了。
我们点击 url 链接,果然,在新窗口中直接打开了图片,这就表示这就是我们要找的插画图片的下载链接了。
我们接下来看看这个可下载插画 url 链接的规律,我们在插画模块打开第二张插画,和刚才一样的步骤,查看它的可下载链接。
简单对比,我们就可以看出来,这两个链接除了id不一样,其他链接不变,而 id 就是插画列表页面返回的 id,这个就简单了。
单张图片爬虫下载
我们把 id 提取出来,我们先来下载一张图片,如果你一张图片用爬虫下载成功了,那你就成功了一半了,剩下的工作就是写个循环去批量下载就行。
我们在看下接口返回的 json 值,发现 illust_id 在 contents 下。
每次动态加载后返回 50 张图的 illust_id,我们现在只下载一张图,就直接返回第一张图的 illust_id 好了。
然后,我们需要写一个下载图片的方法,保存在指定的目录下,文件名用 illust_id,图片链接前面也分析过了,除了 illust_id,其他都是相同的,我们简单做下拼接就可以完成下载了。
这样第一张图片就成功的下载好了。
批量靓图下载
上面单张图片下载搞定了,接下来就是批量了。
第一个批量的地方是插画列表页面超过50张图,再下滑时,会产生接口返回新的数据,接口的请求除了页码 p 不同,其他都是一样。
下滑到最底部,Headers 下面请求的 p 最大值是 10,那我们把 p 值当成参数,在 1 到 10 里循环就好了。
第二个批量的地方是 illust_id 获取那里,刚才下载一张的时候我们直接写成 0,50个的话我们写个循环就好了。
上面图中 i 每次加 1 都会返回一个 illust_id,我们用一个把返回的 50 个 illust_id 全部添加到 illust_ids 的空列表中,下载时从 illust_ids 循环获取 illust_id 实现批量下载。
反爬措施
对于短时间批量下载,很容易被反爬,被封ip导致段时间内无法再继续爬取。
反爬措施主要有以下 3 种。
加等待时间
我们可以在批量请求接口之间加入随机等待时间,因为封 ip 一般都是根据在规定时间内你的请求达到了它规定的阈值,所以我们可以加个随机等待时间来控制下爬取的频率。
但是这个随机等待的时间也不好控制,等待时间太短的话可能效果也不明显,太长的话就会延长爬取的时间。
随机UA
User Agent 也是网站判断你的请求是不是正常的浏览器请求行为,如果你的爬虫里没有这个参数,那网站第一时间就认定了你是个爬虫,被封就是分分钟的事情了,如果你的 UA 一直不变的话,那多请求几次后,那就会被识别了,所以我们需要多弄几个 UA,每次请求的时候随机从这几个 UA 去获取。
代理ip池
最保险的就是自己建立一个代理 ip 池了,代理 ip 也有免费和付费的,免费的可用率不高,需要自己爬取下来后检查下再用,每次爬取随机选择一个可用的代理 ip,这样可以极大的降低被封 ip 的风险。这个下次再写篇文章专门讲讲怎么搭建自己的代理 ip 池。
好了,以上步骤基本上是爬虫的基本步骤了,除了本文的爬 P站图片,爬取其他网站的图片步骤基本也是这个思路了。
最后,这些图片用于自己欣赏和做壁纸没问题,用于视频封面和素材或者文章的封面需要注意下图片是否有版权。
代码中 headers 信息记得替换成自己的再运行代码。
这些信息也不用一个个手动输,之前文章讲过的 curl 转换神器(https://curl.trillworks.com/),可以一键生成这些参数。
如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
2️⃣国内外Python书籍、文档
① 文档和书籍资料
3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。