Management&TechnologyofSME中小企业管理与科技Management&TechnologyofSME中小企业管理与科技1引言随着大数据时代的到来,大数据具有数据体量巨大(Volume)、数据类型繁多(Variety)、价值密度低(Value)、处理速度快(Velocity)的特点[1]。面对人们越来越多样的需求[2],可以根据自己的实际需求,继续修改程序来达到自己的要求[3]。程序按照一个检索词列表进行批量爬取,并把图片信息存入数据库中。本文提供了一个通过Python调用FlickrAPI实现通过关键字检索获取图片信息并批量下载的程序。2相关技术2.1PythonPython是一种计算机程序设计语言,是一种动态的、面向对象的脚本语言。Python语言的一大优势就是其语法简洁清晰,并具有丰富和强大的类库[5],这为程序的编写提供了极大的便利使得数据抓取工作变得生动有趣[6],从而简化了程序。2.2FlickrAPIFlickr是雅虎旗下的图片分享网站,上面有全世界网友分享的大量精彩图片,被认为是专业的图片网站。3爬虫系统工作系统分为两部分:第一部分即调用FlickrAPI获取图片等数据,第二部分即根据数据库中的图片Url下载图。获取图片信息的流程图如图1所示,下载的流程图如图2所示。3.1调用API获取信息Flickr网站上的每张图片都有一个唯一标识的ID,如果想要知道图片的信息首先就是要获取图片在Flickr上的ID,再通过调用Flickr的多种方法来获取图片的不同信息。FlickrAPI库有很多方法可以调用,可以获取不同的图片数据[4]。但是使用前提都是需要有FlickrAPI的密钥,参考代码如下:Flickr=flickrapi.FlickrAPI(API_KEY,API_SECRET,cache=True)程序主要通过关键词来进行检索相应的图片,tags和text就是对应输入相应的关键词参数,extras为要求返回不同大小图片的Url。参考代码如下:photos=flickr.photos.search(extras='url_c',per_page=5,text=keyword,tag_mode='all',content_type=7,tags=keyword,sort='relevance')通过photos.search方法就可以获得检索图片的Json列基于Python的关于Flickr图片网站的爬虫TheWebCrawlerofFlickrPhotoWebsiteBasedonPython王金峰1,李世良1,王明2,罗星宇1,张雪玉1(1.防灾科技学院信息工程学院,河北三河065201,2.河北女子职业技术学院,石家庄050091)WANGJin-feng1,LIShi-liang1,WANGMing2,LUOXing-yu1,ZHANGXue-yu1(1.SchoolofInformationEngineering,InstituteofDisasterPrevention,Sanhe065201,China;2.HebeiWomen'sVocationalCollege,Shijiazhuang050091,China)【摘要】如今的互联网已然进入大数据时代,网络上有数以百计的图片,图片网络爬虫可以通过既定的规则自动地抓取互联网上的图片并下载至本地存储,通过对国内外各大图片网站的调查研究,决定以国外网站Flickr为对象通过Python程序设计语言来实现获取高质量的,准确的,完整的图片和信息。最终成功实现了对Flickr网站上的图片按照检索的字段,批量爬取图片信息并下载图片的程序。【Abstract】Today'sInternethasenteredtheeraofbigdata.Therearehundredsofpicturesontheinternet,picturewebcrawlerscanautomaticallycapturepicturesontheinternetanddownloadthemtolocalstoragethroughestablishedrules.Throughtheinvestigationandresearchofthemajorphotowebsitesathomeandabroad,wedecidedtotakeFlickr,whichiaaforeignwebsite,astheobjectofstudytoobtainhighquality,accurateandcompletepicturesandinformationthroughPythonprogramminglanguage.Finally,wesuccessfullyrealizetheprogramofcrawlingpictureinformationanddownloadingpictureinbatchesaccordingtothesearchfieldofthepictureonFlickrwebsite.【关键词】Python;网络爬虫;Flickr;多线程;图片【Keywords】Python;webcrawler;Flickr;multithreading;picture【中图分类号】X87【文献标志码】A【文章编号】1673-1069(2019)01-0182-02【基金项目】项目名称:达内工程教学课程体系研究以及经验借鉴,项目编号:JY2018B22。【作者简介】王金峰(1987-),男,河北邯郸人,讲师,从事大数据、深度学习研究。【通讯作者】李世良(1997-),男,四川绵阳人,从事Python爬虫设计,网页前端页面设计研究。182
表,再对图片列表逐个分析通过调用photo.get()获得关键的数据即图片url和图片在Flickr网站上的id,返回的Json列表:{"photos":{"page":1,"pages":3,"perpage":100,"total":"9","photo":[{"id":"43164265680","owner":"119760755@N07","secret":"6c40b7a80a","server":"1951","farm":2,"title":"Harztropfen*Resindrops*Gotasderesina*Silber-Akazie(Acaciadealbata)*._DSC5690-001","ispublic":1,"isfriend":0,"isfamily":0},"stat":"ok"}如果想要获取图片的其他数据可以根据获取到的图片id通过调用其他的方法并解析返回的Json数据来进行获取。方法调用参考代码如下:photos=flickr.photos.getExif(photo_id=PicId)Details=flickr.photos.getInfo(photo_id=PicId)data=json.loads(Details)data1=json.loads(photos)try:PicJson=data['photo']except:PicJson="None"PicJsonDa=str(PicJson)PicJsonData=filter_emoji(PicJsonDa)try:Locatio=data['photo']['owner']['location']except:Locatio="None"Location=Locatio.replace("'","")ifLocation=="":Location="None"try:Realnam=data['photo']['owner']['realname']except:Realnam="None"3.2图片的下载图片的下载是根据之前获取的图片的url借助request库来进行下载的。图片保存的格式是按照检索的字段为文件夹,文件夹里包含下载的图片。参考代码如下:defDownloadPic(PhotoUrl,name,Guid):mkpath="E:\\FlickrPictures\\"+str(name)isExists=os.path.exists(mkpath)ifnotisExists:os.makedirs(mkpath)r=requests.get(PhotoUrl,timeout=5)path="E:\\FlickrPictures\\"+str(name)+"\\"+str(Guid)+'.jpg'withopen(path,'wb')asf:f.write(r.content)在图片的下载时将采用多线程下载借助threadpool库实现,参考代码如下:pool=threadpool.ThreadPool(10)tasks=threadpool.makeRequests(Main,url)[pool.putRequest(task)fortaskintasks]pool.wait()4结语本文的爬虫通过调用FlickrAPI和Python丰富的第三库实现了对Flickr网站上的图片和图片信息进行批量爬取的程序,为一些追求高质量的,准确的,想要获取图片相关信息数据的研究者提供了一种方案。通过充分利用Python语言的特点结合FlickrAPI,能够方便快捷地获取大量的图片和图片相关信息,并将获取到的图片自动存储到本地,为后续的机器学习、人工智能奠定了数据基础。【参考文献】【1】夏火松,李保国.基于Python的动态网页评价爬虫算法[J].软件工程,2016,19(02):43-46.【2】贾棋然.基于Python专用型网络爬虫的设计及实现[J].电脑知识与技术,2017,13(12):47-49.【3】刘洪志.利用Python批量获取互联网中的桌面壁纸[J].电脑编程技巧与维护,2014(21):56-58+74.【4】齐亚莉,张磊.基于Python的图像搜索系统的设计与实现[J].北京印刷学院学报,2010,18(02):48-51.【5】云洋.基于Python的图片爬虫程序设计[J].电子技术与软件工程,2018(17):241-242+244.【6】熊畅.基于Python爬虫技术的网页数据抓取与分析研究[J].数字技术与应用,2017(09):35-36.获取检索字段列表获取返回的图片列表数据解析图片的url,id,owner,title等信息根据图片的id,获取坐标,作者,拍摄时间等信息解析过的图片数量是否超过200张判断是否为检索列表的最后一个字段结束是否否获取URL列表根据检索关键词创建文件夹Requests请求保存图片判断是否为URL列表中的最后一个字段结束开始否是开始图1图2ApplicationandPracticeofNewTechnology新技术应用与实践183