基于Python的关于Flickr图片网站的爬虫
2019-02-18王金峰李世良王明罗星宇张雪玉
王金峰 ,李世良 ,王明 ,罗星宇 ,张雪玉
(1.防灾科技学院 信息工程学院,河北 三河 065201,2.河北女子职业技术学院,石家庄 050091)
1 引言
随着大数据时代的到来,大数据具有数据体量巨大(Volume)、数据类型繁多 (Variety)、价值密度低 (Value)、处理速度快(Velocity)的特点[1]。面对人们越来越多样的需求[2],可以根据自己的实际需求,继续修改程序来达到自己的要求[3]。程序按照一个检索词列表进行批量爬取,并把图片信息存入数据库中。本文提供了一个通过Python调用Flickr API实现通过关键字检索获取图片信息并批量下载的程序。
2 相关技术
2.1 Python
Python是一种计算机程序设计语言,是一种动态的、面向对象的脚本语言。Python语言的一大优势就是其语法简洁清晰,并具有丰富和强大的类库[5],这为程序的编写提供了极大的便利使得数据抓取工作变得生动有趣[6],从而简化了程序。
2.2 Flickr API
Flickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站。
3 爬虫系统工作
系统分为两部分:第一部分即调用Flickr API获取图片等数据,第二部分即根据数据库中的图片Url下载图。获取图片信息的流程图如图1所示,下载的流程图如图2所示。
3.1 调用API获取信息
Flickr网站上的每张图片都有一个唯一标识的ID,如果想要知道图片的信息首先就是要获取图片在Flickr上的ID,再通过调用Flickr的多种方法来获取图片的不同信息。Flickr API库有很多方法可以调用,可以获取不同的图片数据[4]。但是使用前提都是需要有Flickr API的密钥,参考代码如下:
程序主要通过关键词来进行检索相应的图片,tags和text就是对应输入相应的关键词参数,extras为要求返回不同大小图片的Url。参考代码如下:
通过photos.search方法就可以获得检索图片的Json列表,再对图片列表逐个分析通过调用photo.get()获得关键的数据即图片url和图片在Flickr网站上的id,
图1
图2
返回的Json列表:
如果想要获取图片的其他数据可以根据获取到的图片id通过调用其他的方法并解析返回的Json数据来进行获取。方法调用参考代码如下:
3.2 图片的下载
图片的下载是根据之前获取的图片的url借助request库来进行下载的。图片保存的格式是按照检索的字段为文件夹,文件夹里包含下载的图片。参考代码如下:
在图片的下载时将采用多线程下载借助threadpool库实现,参考代码如下:
4 结语
本文的爬虫通过调用Flickr API和Python丰富的第三库实现了对Flickr网站上的图片和图片信息进行批量爬取的程序,为一些追求高质量的,准确的,想要获取图片相关信息数据的研究者提供了一种方案。通过充分利用Python语言的特点结合Flickr API,能够方便快捷地获取大量的图片和图片相关信息,并将获取到的图片自动存储到本地,为后续的机器学习、人工智能奠定了数据基础。