再做一个网站,要找一些高清图片,然后同学推荐了这个网站:Unsplash 。但是每张图片下载要手动点,然后下拉加载更多图片,效率不高,所以自己写了爬虫程序,进行自动化下载图片,自己参考了下面这篇文章(很多地方有所改动):
![1531909-373fa81c7ef0f649.png](https://i-blog.csdnimg.cn/blog_migrate/1f12b9b083181a54e808f7a747ea0958.webp?x-image-process=image/format,png)
一、分析网站,找到图片的src地址
因为这个网站和上一篇的360图库差不多,图片相关信息是通过js动态加载的,所以自己先观察了下network下的XHR,果然找到想要的信息,并且响应数据是我们容易处理的json格式,但是自己爬去的时候,请求被拒绝了。。。
![1531909-f4587accab853ca0.png](https://i-blog.csdnimg.cn/blog_migrate/e03d2b5c15dfb8f8afba34e7b72d85c2.webp?x-image-process=image/format,png)
![1531909-584ada76bd0803e1.png](https://i-blog.csdnimg.cn/blog_migrate/bf4b7e676166c7b2895e3f4b5c80dc61.webp?x-image-process=image/format,png)
然后自己尝试获取网页源代码,然后找到img的源地址,通过分析发现,每张图片放在a标签里,class=“cV68d”,background-image的url地址就是图片的源地址。
![1531909-1c2dd7f2fa294a6c.png](https://i-blog.csdnimg.cn/blog_migrate/3057d3f3fc02b7bde52d101e1efd0ea3.webp?x-image-process=image/format,png)
所以大致思路是:首先通过的selenium+Chrome() (ps:我用PhantomJS有bug过不去。)模拟浏览器下拉行为,然后获取网页源代码,通过xpath和正则表达式获取到图片的源地址,然后获取图片名称,并下载保存。
二、程序代码及相关解释
1、这次使用的模块有点多,主要是为了方便操作和下载图片
![1531909-15ceafc806fd0f81.png](https://i-blog.csdnimg.cn/blog_migrate/0b5a0c32757816d99bfc5a37d3c782d5.webp?x-image-process=image/format,png)
2、 驱动使用的Chrome,需要提前准备好。
![1531909-0c5a3a3758748499.png](https://i-blog.csdnimg.cn/blog_migrate/eb7b91f5d6b09e2731184782a026e504.webp?x-image-process=image/format,png)
2、使用execute_script()执行js脚本,实现浏览器下拉
![1531909-d5d66c85dfd79360.png](https://i-blog.csdnimg.cn/blog_migrate/a4e9eebaee0cc78cbb608cbc31ae52fe.webp?x-image-process=image/format,png)
3、获取a标签的style内容,然后获取到目标数据,最后执行保存图片方法
这里提到一点就是:fina_src=urlparse(' '+ src).path.strip(),这里我用空格拼接一下的目的是为了能够正确得到图片的地址,否则解析的path内容不正确
![]()
path的内容不正确
url加上的空格之后,效果是下面
![]()
正确的path内容
(ps:这个调了好长时间,,头皮发麻)
![1531909-f93200cbacd87d70.png](https://i-blog.csdnimg.cn/blog_migrate/1ae0685f54c34ac15d1c54987d463a9e.webp?x-image-process=image/format,png)
4、执行函数,这里设置下拉三次,下载的图片不是30张,而是500多,原因也很简单:每次下拉的高度是下拉到底部,一个窗口的高度,而加载10张图片只需下拉一点高度。
![1531909-158bdcf32df9428a.png](https://i-blog.csdnimg.cn/blog_migrate/d87e18d40859a5119c076056f28f8080.webp?x-image-process=image/format,png)
三、执行效果
![1531909-b5f400a9502c5f3f.png](https://i-blog.csdnimg.cn/blog_migrate/426788a60f6ddbc5aaf5ba667a8cde2e.webp?x-image-process=image/format,png)
![1531909-e3b62f0b3399411f.png](https://i-blog.csdnimg.cn/blog_migrate/db3168f7174d3e24a1cef2b3f43337cf.webp?x-image-process=image/format,png)
源码:https://github.com/yanqiangmiffy/Unsplash