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 条评论
登录 后参与评论

相关文章

来自专栏地方网络工作室的专栏

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(四)调整 App.vue 和 router 路由

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(四)调整 App.vue 和 router 路由 前情回顾 在上一篇《V...

24390
来自专栏Youngxj

修改Windows 7 开机启动画面

28820
来自专栏技术专栏

Python3入门与实践(五):IO 与 异常

13140
来自专栏Spring相关

Vue路由router-link的使用

15820
来自专栏java架构师

资源文件的动态加载

页面加载 首先,浏览器发起直接对目标html的请求,然后分析其中用到的资源并下载,浏览器有自己的规则来判断什么样的资源可以被并行下载,什么样的不可以,浏览器对加...

39190
来自专栏地方网络工作室的专栏

打造前端 Deepin Linux 工作环境——调节鼠标滚轮速度

打造前端 Deepin Linux 工作环境——调节鼠标滚轮速度 在 deepin 的系统设置里面,没有找到鼠标滚轮速度调节的选项。但是默认情况下,其滚轮的速度...

349100
来自专栏编程微刊

表格插件-bootstrap table的使用示例

基于 Bootstrap 的 jQuery 表格插件,通过简单的设置,就可以拥有强大的单选、多选、排序、分页,以及编辑、导出、过滤(扩展)等等的功能。

15820
来自专栏owent

Webpack+vue+boostrap+ejs构建Web版GM工具

Web前端的组件技术刷新真的是日新月异,前段时间看到很多童鞋分享了webpack的使用,刚好之前做我们游戏里Web版的GM工具的时候正在想怎么用简单的方式,做模...

57320
来自专栏云计算教程系列

在CentOS上用Caddy安装WordPress

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中...

96940
来自专栏葡萄城控件技术团队

SpreadJS使用进阶指南 - 使用 NPM 管理你的项目

12420

扫码关注云+社区

领取腾讯云代金券