专栏首页程序生活Python爬虫系列(六)外国图库Unsplash图片自动化下载

Python爬虫系列(六)外国图库Unsplash图片自动化下载

再做一个网站,要找一些高清图片,然后同学推荐了这个网站:Unsplash 。但是每张图片下载要手动点,然后下拉加载更多图片,效率不高,所以自己写了爬虫程序,进行自动化下载图片,自己参考了下面这篇文章(很多地方有所改动): Python爬虫小白入门(五)PhatomJS+Selenium第二篇

一、分析网站,找到图片的src地址

因为这个网站和上一篇的360图库差不多,图片相关信息是通过js动态加载的,所以自己先观察了下network下的XHR,果然找到想要的信息,并且响应数据是我们容易处理的json格式,但是自己爬去的时候,请求被拒绝了。。。

每次下拉请求10张图片的相关信息

但是我们直接请求的话,是直接被拒绝的。。

然后自己尝试获取网页源代码,然后找到img的源地址,通过分析发现,每张图片放在a标签里,class=“cV68d”,background-image的url地址就是图片的源地址。

图片的位置

所以大致思路是:首先通过的selenium+Chrome()  (ps:我用PhantomJS有bug过不去。)模拟浏览器下拉行为,然后获取网页源代码,通过xpath和正则表达式获取到图片的源地址,然后获取图片名称,并下载保存。

二、程序代码及相关解释

1、这次使用的模块有点多,主要是为了方便操作和下载图片

程序需要用到的模块

2、 驱动使用的Chrome,需要提前准备好。

初始化构造函数

2、使用execute_script()执行js脚本,实现浏览器下拉

下拉操作

3、获取a标签的style内容,然后获取到目标数据,最后执行保存图片方法 这里提到一点就是:fina_src=urlparse(' '+ src).path.strip(),这里我用空格拼接一下的目的是为了能够正确得到图片的地址,否则解析的path内容不正确

path的内容不正确 url加上的空格之后,效果是下面

正确的path内容 (ps:这个调了好长时间,,头皮发麻)

下载图片

4、执行函数,这里设置下拉三次,下载的图片不是30张,而是500多,原因也很简单:每次下拉的高度是下拉到底部,一个窗口的高度,而加载10张图片只需下拉一点高度。

过程有点慢。

三、执行效果

模拟下拉动作,然后下载

大功告成

源码:https://github.com/yanqiangmiffy/Unsplash

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习(二十一) 异常检测算法之IsolationForest

    IsolationForest指孤立森林,是一种高效的异常检测算法。在所有样本数据中,异常数据具有数量少并且与大多数数据不同的特点,利用这一特性分割样本,那些异...

    致Great
  • PageRank算法原理与实现

    假设一个由4个网页组成的群体:A,B,C和D。如果所有页面都只链接至A,那么A的PR(PageRank)值将是B,C及D的Pagerank总和。

    致Great
  • Leetcode-Easy 461.Hamming Distance

    Leetcode-Easy是Leecode难度为"Easy"的解法,由python编码实现。 461.Hamming Distance 描述: ? 思路: 首...

    致Great
  • 2017.10.26水题大作战部分题解

    感觉这一场的题目超纲了QWQ。。。 好难啊QWQ。。。。。。 A  P2907 [USACO08OPEN]农场周围的道路Roads Around The Far...

    attack
  • 程序员应该如何提高自己?

    想法和问题 当程序员已经处于中级时,应如何提高自己?有很多关于“学习编程”的资源,能够让人从 0 到新手(虽然这些资源中大多数的质量是值得商榷的),但是怎么样才...

    企鹅号小编
  • 程序员都是学了软件工程专业才去编程序的吗?有没有不学软件工程专业就去的编程的?

    不是所有的程序员都是学会了软件工程才去编程的,即使是计算机专业的也不一定学过软件工程,毕竟只是计算机的里面的分类就很多,更不要说是非计算机专业,不可能只有软件工...

    程序员互动联盟
  • 中级程序员还应该如何提高自己?

    想法和问题 当程序员已经处于中级时,应如何提高自己?有很多关于“学习编程”的资源,能够让人从0到新手(虽然这些资源中大多数的质量是值得商榷的),但是怎么样才能...

    用户1289394
  • 进击的Java程序员:如何不断地提高自己的编程能力向架构师迈进

    当程序员处瓶颈期应如何提高自己?有很多关于“学习编程”的资源,能够让人从 0 到新手(虽然这些资源中大多数的质量是值得商榷的),但是怎么样才能将中级水平提高到专...

    慕容千语
  • 行业报告归档 2018.3.28

    ApacheCN_飞龙
  • 行业报告归档 2017.3.21

    ApacheCN_飞龙

扫码关注云+社区

领取腾讯云代金券