终于!我用爬虫批量保存了P站的靓图

20 篇文章 2 订阅

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取

python免费学习资料、代码以及交流解答点击即可加入


大家好,今天我决定爬虫下 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 信息记得替换成自己的再运行代码。

 

 

以上就是今天的分享,希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值