1、2023.6电脑编程技巧与维护作者简介:姜庆玲(1991),女,教师,硕士,研究方向为计算机基础应用、数据分析与数据挖掘。基于 Python 与 Requests 模块的网络图片爬虫程序设计姜庆玲,张樊(武昌工学院,武汉430065)摘要:在互联网的时代背景下,从大量的网络信息中快速获取批量的图片资源,是一个值得研究的论题。在此基于 Python 爬虫框架中的 5 个部分,按照 Requests 模块的 6 个步骤,实现快速且批量获取网络图片的爬虫程序设计。实验结果表明,该爬虫程序代码量少、思路清晰、简单易学、结果正确,具有一定的实用性。关键词:爬虫程序;Requests 模块;图片爬虫1概述
2、随着“互联网+”时代的到来,人们获取信息的方式渐渐从报刊等传统媒体转为从互联网上获取,信息的时效性和全面性不断提高。网络上的各种的信息也便于人们根据各自需求保存下载,这么多的数据,如何快速获取并保存到本地,就是一个非常重要的问题。文字与图片是构成一个网页的两个基本的元素,文字表示网页内容;图片体现网页的美观1。文字的获取方式比图片简单,在此将主要介绍网页中图片的获取,设计一种爬虫程序,实现运行一次爬虫程序就可以获取多张网络图片的功能。现有的爬虫技术大多聚焦于文字信息的获取,例如获取各种新闻网站、网购网站、招生网站等各大网站的文字信息26,或者关注点在各种爬虫框架的研究,例如,比较3种主流爬虫框
3、架的优势和缺点,并给出最佳的网页爬虫设计方案78。在已有的研究中,也有极少的学者对图片的爬取展开研究,例如,唐婷9、王金峰10、涂辉11分别使用Requests模块、Flickr API、urllib库实现单张网络图片的获取;仇明12提出使用Beautifulsoup库来分析网页链接、图片链接,再使用Requests库进行页面的访问、文件的下载。在此提出的爬虫程序仅使用Requests模块按照简单的步骤即可实现多张网络图片的获取。2相关技术2.1爬虫及 Python爬虫,顾名思义是一种能够爬行的“虫子”,这个“虫子”在互联网上爬行能够获取各种信息,一般是以程序的形式实现。现阶段,能够快速实现爬
4、虫程序的语言是Python语言。该语言免费开源、语法简单、可移植性强,并且拥有丰富的库,基于上述优点,采用Python设计爬虫程序。随着Python中的爬虫库越来越多,逐步形成Python爬虫架构,该框架主要由5个部分组成,分别是调度器、统一资源定位符(URL)管理器、网页下载器、网页解析器和应用程序。调度器的作用是负责协调其他4个部分的工作,URL管理器的作用是集中管理待爬取和已爬取的网页URL,网页下载器的作用是根据URL下载对应的网页,网页解析器的作用是根据用户的需求提取信息并保存,应用程序的作用是将提出的信息进行处理并运用。2.2Requests 模块Requests模块基于Apach
5、e2使用Python编写超文本传送协议(HTTP)库,它比urllib2模块更简洁,并支持使用cookie保持会话、文件上传、自动响应内容的编码、国际化的URL和POST数据自动编码等功能。Re-quests模块进行了更高度的封装,从而在进行网络请求时,操作更人性化且更便捷。使用Requests模块实现Python爬虫框架的主要步骤如下。(1)导入Requests模块。(2)设置请求头headers。(3)设置待爬取的网页URL。(4)发送请求并保存反馈的信息。(5)对页面进行解析并保存关键数据。(6)处理关键数据并运用。其中,第(3)步属于URL管理器的实现;第(4)步属于网页下载器的实现;
6、第(5)步属于网页解析器的实现;第(6)步属于应用程序的实现。3实现思路以百度图片网页为例,在该网页下根据输入的关键词可以获取多张对应的图片,爬虫程序的流程如图1所示。59DOI:10.16184/prg.2023.06.0142023.6电脑编程技巧与维护4具体实现采用Windows 10操作系统下安装的Python 3.7环境,使用PyCharm 2019进行程序编写,并已安装好re-quests第三方包,下面介绍关键代码的编写过程。4.1导入模块使用import关键字导入所需的模块文件,主要需要requests、os、re这3个包文件,编写代码如下。import requestsimpo
7、rt osimport re4.2设置请求头请求头的设置便于服务器识别访问者身份,便于获取响应信息,一般设置User-Agent即可,不同浏览器的User-Agent不同,需要单击页面中右键打开页面调试器,找到“网络”选项卡中任意一项资源的请求标头,如图2所示。在请求标头中,将第一项Accept和最后一项User-Agent的字段均复制到headers变量,其中,Accept表示浏览器能接收的资源类型,添加此设置,可以尽可能多地获取服务器反馈的数据信息。因此,编写代码如下。headers=User-Agent:Mozilla/5.0(Windows NT 10.0;Win64;x64)Appl
8、eWebKit/537.36(KHTML,like Gecko)Chrome/111.0.0.0 Safari/537.36,Accept:text/html,application/xhtml+xml,applica-tion/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.74.3设置待爬取的页面 URL在百度图片网站中,根据搜索的关键词不同,显示的图片也不相同,根据用户输入的图片关键词搜索相应的图片,编写代码如下。urlFirst=ht tps:/ getI
9、mages(urls):i=1#控制文件命名for url in urls:try:res=requests.get(url=url,headers=headers,verify=False,timeout=5)con=res.content#创建文件夹,如果不存在就创建文件夹if not os.path.exists(ky):os.makedirs(ky)#如果响应文件的类型不是图片格式就不保存if(text/html not in res.headers Content-Type):with open(ky+/.jpg.format(i),wb)as f:f.write(con)i+=1e
10、xcept Exception as e:#如果访问不到,提示错#误,并访问下一个网址print(获取图片失败!)print(结束!)将上述getImages()函数定义在代码最前面,并在4.5的if语句中添加函数调用。5实验结果将上述代码编写完成后,运行时提示“请问你需要搜索什么图片?”,根据需要自行输入,以“鲜花”为例,输入后,运行结果显示“结束!”时,即可打开对应的本地文件夹查看下载的多张图片文件,如图4所示。将输入的搜索关键字改为其他的内容,也可以获取对应的文件夹及图片集,可自行验证。6结语通过分析近几年图片爬虫领域的研究发现,研究能够快速且批量获取网络图片的爬虫有一定的必要性。在此按
11、照Python爬虫框架的5个部分,结合Requests模块的6个步骤,设计一个爬取网络图片的爬虫程序,实验结果表明,该程序能够根据用户需求快速且批量的保存网络图片到本地,可以为图片识别、分类和运用等研究奠定数据基础。参考文献1袁磊,陈伟卫.网页设计与制作实例教程M.北京:清华大学出版社,2008.2邓晓璐,姚松.基于Scrapy的新浪微博数据爬虫研究J.现代信息科技,2023,3(7):44-47.3胡学军,李嘉诚.基于Scrapy-Redis的分布式爬取当当网图书数据J.软件工程,2022,10(25):8-11.4伍高巍,刘杰.基于Scrapy的研招网硕士目录爬虫的设计与实现J.电脑知识与
12、技术,2022,17(18):53-55.5魏海昱,林伟鸿,贺超波.基于Scrapy的食品安全舆情数据爬取与分析J.现代计算机,2022,14(28):49-54.6赵蔷.基于Python爬虫的旅游网站数据分析与可视化J.电子设计工程,2022,16(30):152-155.7杨健,陈伟.基于Python的三种网络爬虫技术研究J.软件工程,2023,2(26):19,24-27.8曾晓娟.基于Python爬虫技术的应用J.办公自图4获取的“鲜花”图片(下转第95页)612023.6电脑编程技巧与维护50000ms40000ms30000ms20000ms10000ms0ms文中分布式云存储系统
13、其他云盘64MB32MB128MB256MB512MB动化杂志,2018(385):62-64.9唐婷.基于Python的网络图片爬虫技术J.信息与电脑,2020(18):176-178.10王金峰.基于Python的关于Flickr图片网站的爬虫J.中小企业管理与科技,2019(1):182-183.11涂辉.Python3编程实现网络图片爬虫J.电脑编程技巧与维护,2017(23):21-22.12仇明.基于Python的图片爬虫程序设计J.工业技术与职业教育,2019,17(1):1-3.图8大文件上传测试结果在文中分布式云存储系统中,随着上传文件大小的增加,由于采用的分块策略,将大文件
14、分割成更小的数据块进行处理,可以有效处理和上传,上传文件的性能较其他云盘提高了10%。对于较大的文件进行分块可以更有效地利用存储服务器的存储空间,减少存储冗余和浪费,如图8和图9所示。5结语针对用户存储数据在云环境下的隐私问题,介绍一种隐私驱动的分布式云存储系统,确保用户可以在云环境存储中的数据安全,得到隐私保护,验证了其在云环境存储下所提供的数据隐私保护、用户检测功能及读写性能。下一步,将继续优化系统对于文件的共享及权限控制,以满足不同需求。参考文献1MACKO P,HENNESSEY J.Survey of Distributed FileSystem Design Choices J.A
15、CM Transactions on Stor-age(TOS),ACM New York,NY,2022,18(1):1-34.2ADYA A,BOLOSKY W,CASTRO M,et al.FARSITE:Federated,available,and reliable storage for an incom-pletely trusted environment/Proceedings of the 5thSym-posium on Operating Systems Design and Implementa-tion.San Francisco,USA,2002:1-14.3薛矛
16、,薛巍,舒继武,等.一种云存储环境下的安全 存 储 系 统J.计 算 机 学 报,2015,38(5):987-998.4RIVEST R L,SHAMIR A,ADLEMAN L.A method forobtaining digital signatures and public-key cryptosys-tems J.Communications of the ACM,ACM NewYork,NY,USA,1978,21(2):120.5SZYDLO M.Merkle tree traversal in log space andtime A.Eurocrypt C.Springer,
17、2004,3027:541-554.6罗象宏,舒继武.存储系统中的纠删码研究综述J.计算机研究与发展,2012,49(1):1-11.7王意洁,许方亮,裴晓强.分布式存储中的纠删码容错技术研究J.计算机学报,2017,40(1):236-255.8孙知信,张鑫,相峰,等.区块链存储可扩展性研究进展J.软件学报,2021,32(1):1-20.9BENET J.Ipfs-content addressed,versioned,p2p filesystem J.arXiv preprint arXiv,2014:1407.10冯朝胜,秦志光,袁丁.云数据安全存储技术J.计算机学报,2015,38(
18、1):150-163.11 SELENT D.Advanced encryption standard J.RivierAcademic Journal,2010,6(2):1-14.12 LI X,LI R,LEE P P,et al.OpenEC:Toward Unified andConfigurable Erasure Coding Management in DistributedStorage Systems.A.FAST C.2019:331-344.图9大文件下载测试结果100000ms80000ms60000ms40000ms20000ms0ms文中分布式云存储系统其他云盘64MB32MB128MB256MB512MB(上接第61页)95