zoukankan      html  css  js  c++  java
  • 终于,我用Python爬虫批量保存了P站的靓图

    今天我决定爬虫下 P站的图片,我们首先打开网站研究下。

    图片

    不好意思,手抖打错了,应该是下面这个网站。

    图片

    众所周知,插图网站 pixiv 别名叫 P站,所以今天我用爬虫批量保存二次元P站的靓图。

    图片

    P站主要分为四个模块,插画、动图、漫画、小说,小说和漫画都是日文,看不懂,所以今天的目标就是插画和动图了。

    图片

    很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:568668415

    图片链接规律分析

    今天就以插画为例,进入插画模块,我们先找到怎么下载单张插画的图片的方法,我们打开 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站图片,爬取其他网站的图片步骤基本也是这个思路了。

    最后,这些图片用于自己欣赏和做壁纸没问题,用于视频封面和素材或者文章的封面需要注意下图片是否有版权。

    爬取 P站图片的所有代码我放在后台了,大家在公众号「Python知识圈」后台回复「p」获取。

    代码中 headers 信息记得替换成自己的再运行代码。

    图片

    这些信息也不用一个个手动输,之前文章讲过的 curl 转换神器(https://curl.trillworks.com/),可以一键生成这些参数。


    以下内容无用,为本篇博客被搜索引擎抓取使用
    (* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
    python 是干什么的 零基础学 python 要多久 python 为什么叫爬虫
    python 爬虫菜鸟教程 python 爬虫万能代码 python 爬虫怎么挣钱
    python 基础教程 网络爬虫 python python 爬虫经典例子
    python 爬虫
    (* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)(* ̄︶ ̄)
    以上内容无用,为本篇博客被搜索引擎抓取使用

  • 相关阅读:
    Dockerfile文件详解
    docker-compose.yml文件
    Linux集中日志服务器rsyslog
    数据库连接池DBUtils使用
    js开关插件使用
    flask基础
    redis系列--深入哨兵集群
    Python算法基础
    redis系列--主从复制以及redis复制演进
    redis系列--redis4.0深入持久化
  • 原文地址:https://www.cnblogs.com/shuchongzeishuai/p/14299167.html
Copyright © 2011-2022 走看看