背景故事

写这篇博文的时候,大D疑似感冒症状,思维迟钝。在本文有什么错误、错字之类的,欢迎在评论中指出~

回到正题,大D是一个伪·摄影爱好者,为啥说伪呢,因为没有几张拿的出手的照片。

购买单反一段时间之后,大D知道了一个叫做Flickr的网站,于是经常将自己的拙作上传到Flickr。但是众所周知,访问Flickr是一件有点难度的事情。是需要学习“科学上网”技能的,为此,大D在国内也寻找了大量的替代服务。比如图虫。

说到图虫,图虫其实真心不错,唯一觉得不够开心的就是图虫采用的是图博形式,虽然也能够单张发,但是总感觉没有Flickr便捷。

由于访问Flickr日渐困难,于是大D觉得需要将自己的相册备份一份出来,虽然电脑上也有备份,但是是散落在以日期为分类方式的一堆目录当中。纵然使用Photoshop Lightroom等软件进行管理,想完全整理出发到Flickr的版本还是有点困难。

所以还是备份吧。Google了一番,也有现成的软件,要么是收费的,要么是无法用的。

后来,在CSDN发现了这样一篇文章:使用FlickrDownloader批量下载Flickr的相册

在阅读之后,虚拟机上装了个Win8,跑起来,下载了一下之后发现,会将重名的掩盖掉,而不是重命名后存储。这对于大D这种从来不给片子起名字,直接按照文件名上传Flickr的人带来了一些不便。

思索一番之后,决定闭门造车,自己造个轱辘出来。

原理

其实这原理没什么好说的。。看了CSDN上的那篇文章之后,大D也采用了跟他一样的方式,就是提取网页源代码中的链接。

Flickr网页源代码中,会存在如下的代码:

该代码片段是重复出现的,从代码中可以看出完全尺寸(Original)的照片链接地址是如下形式的:

比对其他链接,会发现文件名结构上的"_o.jpg"是表示其尺寸的,在了解了连接形式之后,使用正则表达式匹配一下。

大D是不太会正则表达式的,每次都是现用现查文档,最后在使用正则表达式测试器来测试。所以大D整理出的正则表达式可能不是最优的表达式组合。

匹配正则表达式如下:

基本上方法就是匹配连接,去除连接中多余的\,然后下载这些链接就可以了。

这个小玩意儿就是大D自己用的,文件名处理什么的完全没考虑,直接用链接中的文件名就好了。

实现

首先自然是读入源代码文件,正则表达式匹配链接然后存储到临时文件当中去。

在正则表达式的r是原始字符串符号,我们需要正则表达式这个字符串不会被转义。

接下来要做的就是去除多余的"\"

取文件名操作并指定工作目录

下载去重以及下载部分:

最后跑起来如下图:

QQ截图20150224193141
遇到的问题

1.由于网络的问题,可能会下载到只有一半的照片,这时候就只能根据文件名自己动手重新下载一个。

2.Flickr采用了https,下载时会遇到https ssl认证的问题,Google了许久没有找到合适的解决方法,也看了urllib3的文档,也没有解决,最后只好通过关闭警告的方式来解决了。

3.对于文件名,应该有更好的处理办法。

完整源代码

也可以在Github上查看:https://github.com/derek-s/FlickrDownleader/blob/master/main.py

使用方法

使用方法什么的。。

这个脚本是运行在Linux上的,需要的就是打开需要下载的Flickr页面,右键空白处,查看源代码。

将源代码存储,然后修改Python源码中的:

将/home/Derek.S/py/1.html修改为自己的路径和文件名。

同样将:

修改为自己的目录就可以,然后需要的就是执行:

模块的问题就自己解决吧。

结尾

这只类爬虫是大D边查Python手册边Google出来的东西,在通用性上可能差强人意。

顺便一提,Python好好用。

难受惨了。睡觉。

版权声明
转载保留版权: 大D技研室 | 《用Python实现批量下载Flickr相册》
本文链接地址:https://www.dadclab.com/archives/5432.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , 标签