前言:
此刻兄弟们对“python画花瓣”都比较注意,小伙伴们都需要学习一些“python画花瓣”的相关内容。那么小编同时在网上收集了一些有关“python画花瓣””的相关文章,希望姐妹们能喜欢,兄弟们一起来学习一下吧!(男人,皆爱美。尊严让我们不能做舔狗,那么我们就用技术爬!)
关注小编后私信【PDF】领取十套电子文档书籍
现在的美女真的是太多?
看蒙了吧,也许你看过直播视频,但会发现我的程序跟他写的有差别,那是因为我用了多线程来加速,这个概念专栏里大神也说过,我把它用到了这里来。因为。。。美女太多了嘛
老样子我们来逐个解释一下:
1.获取url的函数得到的是json格式,这里是偷个懒,直接在功能函数里.json了,其实可以不用,不过就需要在下文调用函数之后加上.json,因为要到的是json格式下的[' ']属性值,text不便于获取
2.解释一下get的参数
1.url——花瓣网首页
2.params是我们附加的url信息,其中:
1.'j0ga0hbi' 我也不知道是什么,那就不管他
2.'max' : '1928153623' 这个比较关键,需要细说一下,网页分为两种,一种是单纯一面,你的操作不影响网页地址的,还有一种就是操作影响该页的地址,比如:下拉加载更多。而我们这么多照片当然就是属于下来越来越多来吸引你。那么这和max参数有什么关系呢?看图
元素检查
Ctrl+shift+C点击一张你喜欢的图片,显示如上图所示元素,在高亮处周围即可找到该相册的链接地址(/pins/1931768331),我们可以打开这个网页看一下(“"+"/pins/1931768331/")是不是我们要的这个相册,这里我告诉你是。此时直接xpath定位,get,就得到我们期望的内容了?
不!原因?因为这里是异步加载(就是上文说的第二种网页形式)
打开花瓣首页,F12,选中XHR,然后往下翻,发现每当页面加载新图片的时候,会发送一个新请求!这个请求就是异步加载请求!
熟悉吗?最底下4个参数就是我们给的param,而max这下是不是眼熟了?没错,就是我们刚才获取的pins不是吗?!
省去你来回查看的功夫,直接告诉你,下一条请求的max就是上一条请求获取到的最后一个pin_id!(pins是相册编号,pin_id是图片编号,其实相册编号也是图片编号)什么意思呢?就是说加载新图片之前的页面上最后一张图的pins就是发送异步请求后加载的第一张图的max!那么这个加载的机制也就是根据图片而来的,而不是固定加载某些图片。我加载的下一页图片是什么取决于已显示的最后一张图片的pins。
所以我们这里get需要给参数param
异步加载
'limit' : '100' 限制最大加载图片数
'wfl' : '1' 不知道,就跟着它本身走
3.headers——请求头,关于网页接收编码啊,表现形式啊,客户端信息之类的,详细的自己谷歌
3.之后就是多线程完成网址爬取任务,说明一下参数n的含义。上面已经说了异步加载会加载更多图片,这里我让n=0,并只执行一次循环,其实就是不让他只往后加载一次图片,因为我现在并不为了爬图,而是为了测试我的程序,加载太多没必要,浪费时间(每次调试我也是对了就ctrl+c的)。而至于为什么把这个循环留在这里,当然为了日后如果。。。咳咳,有需要的话,可以多爬些美女嘛。
4.有了相册的网址,那么下一步就是进入相册中去爬这相册中的图片了。步骤没有太大变化,因为是同一网站上的图片爬取,注意xpath即可
5.下载保存
这里还是说明一下,原本以为用了多线程,图片爬取会快很多,但实际结果并没有那么明显。我觉得可能是网速限制的原因。本身url的多线程由于网址不多且构造相对简单,所以速度上提升不明显,加上下载图片最大受限于网速,所以整个提速并没有那么显著。(甚至觉得不用那么麻烦,单线程的话程序简单并且清晰得多)
那,我知道你们想什么:那就给我们单线程的程序啊!
给啊!看招!
单线程程序部分1
标签: #python画花瓣