1、2023 年 8 月 25 日第 7 卷 第 16 期现代信息科技Modern Information TechnologyAug.2023 Vol.7 No.161001002023.082023.08收稿日期:2023-03-14基金项目:基于计算机设计大赛视角的计算机类专业应用型创新能力培养的研究与实践(2023JY11)基于 Python 和 Requests 快速获取网页数据的方法研究姜庆玲,张樊(武昌工学院,湖北 武汉 430065)摘 要:随着“互联网+”和大数据时代的到来,网络上充斥着各种各样的数据,过滤并获取有用的数据在当今环境下至关重要。文章提出一种基于 Python 和
2、Requests 模块的快速获取网页数据的方法,使用该方法可以获取解析前的网页源代码文本和图片数据,并保存为本地文件,为之后的数据分析和深入学习大数据技术奠定基础。实验结果表明,该方法步骤和代码编写简单易学,运行结果较好,具有一定的实用性。关键词:Python 技术;Requests 模块;网络图片爬取中图分类号:TP312.1;TP393 文献标识码:A 文章编号:2096-4706(2023)16-0100-05Research on Method of Quickly Obtaining Web Data Based on Python and RequestsJIANG Qinglin
3、g,ZHANG Fan(Wuchang Institute of Technology,Wuhan 430065,China)Abstract:With the arrival of the“Internet+”and big data era,the network is full of all kinds of data.Filtering and obtaining useful data is crucial in todays environment.This paper proposes a method to quickly acquire web data based on P
4、ython and Requests modules.Using this method,you can obtain the text and image data of the web source code before parsing,and save them as local files,laying the foundation for later data analysis and in-depth study of big data technology.The experimental results show that the steps and coding of th
5、is method are easy to learn,the running results are good,and it has certain practicability.Keywords:Python technology;Requests module;network image crawling0 引 言近年来,随着国家“互联网+”行动的提出,各行各业都开始关注互联网技术的发展,这也促进了大数据时代的到来。在大数据时代下,文字和图片信息也逐步数字化,出现在大小屏幕上,人们获取信息的方式更加快捷和多样。大量的数据逐步堆积在网络上,人们接收的信息也逐渐庞大,而其中有些信息,人们并不
6、需要。这时,一种能过滤信息的技术就会应运而生,Python 语言就可以很好地帮助人们过滤并获取有用的信息。本文将介绍基于Python 语言下获取网页数据的方法,该方法简单易实现,能够获取网页文本和图片数据。纵观近 5 年国内在 Python 技术中获取网页信息的文献,有大量的网页爬虫框架的研究,例如基于Scrapy 爬虫框架的研究有新浪微博数据爬虫研究1、房产信息爬取系统设计2、分布式获取当当网图书数据3、食品安全舆论数据爬取与分析4、研招网DOI:10.19850/ki.2096-4706.2023.16.022硕士目录爬虫的设计与实现5等。除了 Scrapy 爬虫技术的研究,还有学者对主流
7、的爬虫技术的研究,例如杨健6等学者就对基于 Python 技术的三种网络爬虫框架(Requests、Scrapy、Selenium)进行了研究,分析了这三种爬虫技术的各自优势和适用场合。根据已有的研究成果,经过各种技术的比较验证后,在确保获取信息效果正确的前提下,Requests 库代码量和步骤都较少,简单易学,适合读者验证并投入使用。综上所述,本文将使用 Requests 库实现获取网页的文本和图片数据。1 相关技术1.1 Python 语言Python 由吉多 范罗苏姆(Guido van Rossum)于 20 世纪 90 年代初设计,作为一门叫作 ABC 语言的替代品,吉多 范罗苏姆曾
8、在于 20 世纪 80 年代曾在 ABC 系统开发中工作了数年,ABC 语言定位为一种交互式的结构化高级语言,旨在替代BASIC、Pascal 等语言,用于教学及原型软件设计,它专注于编程初学者,但是存在平台迁移能力弱且难以添加新功能等问题,以至于ABC语言并未成功。Python 继承了 ABC 语言的优点,能够让编程初学现代信息科技8月下16期.indd 100现代信息科技8月下16期.indd 1002023/8/15 17:38:172023/8/15 17:38:171011012023.082023.08第 16 期者易学上手,并解决了前者的致命性问题,确保了拓展模块的编写和跨平台运
9、行。Python 基于上述优点,应用起来非常方便,迅速流行起来,也逐步推动了其自身的发展。现在的Python 语言拥有丰富的库、面向对象、免费开源、可扩展性、可嵌入性、可进行高级动态编码、适合做科学计算等诸多优点,也促使了大数据和人工智能的发展,就连国内高等教育中,Python 语言程序设计已经成为基础学科。在语法方面,区别于其他高级语言,Python 语言必须使用 4 个空格来表示每级缩进,缩进是语法的一部分。除此之外,Python 语法和其他高级语言类似,例如数据类型、表达式、语句、函数、对象等语法,仅部分写法有些差别。Python 拥有丰富的库,可拓展性极强,应用领域非常广泛,主要应用于
10、软件开发、科学计算和统计、人工智能、图像处理、数字和文本处理、数据库编程、网络编程、多媒体应用、游戏引擎、黑客编程等多个领域。1.2 Requests 模块Requests 模块是 Python 丰富的库文件中的一种,是一个基于 Apache2 协议开源的 Python HTTP库。它是爬虫技术的基础,号称是“为人类准备的HTTP 库”。在 Python 语言中,系统自带的 urllib和 urllib2 都提供了功能强大的 HTTP 支持,但是API 接口确实太难用了,这才有了 Requests 库的产生。在 Requests 模块中,请求一个网页地址,只需要一句代码。使用 Requests
11、 模块的步骤如下:1)解析网址 URL 的格式和参数;2)设置网络请求参数;3)选择合适的请求方式发送网络请求;4)根据网络请求状态码判断是否获取成功,如果成功,接收并保存数据;5)根据需要解码数据。2 步骤详解2.1 解析网址 URL在上述步骤第一步中,网址 URL 通用格式为::/:/?#:/:/?#其中:表示访问服务器获取资源所使用的协议,例如 http、https、ftp 等。表示资源宿主服务器的主机名、ip 地址或域名。表示资源宿主服务器正在监听的端口号,例如 http 默认为 80、https 默认是 443 等。表示服务器上资源的路径,由斜杠(/)与前面 URL 组件分隔开。表示
12、服务器上资源规定的参数。表示资源的查找条件,用问号(?)与URL 其余组件分隔开。表示网页锚点,用于标记一个网页中部分内容。根据上述合法的网址格式,可举例如下:http:/ 设置网络请求参数在确定好要爬取的网页 URL 后,点击页面右键的“检查”选择项后,出现如图 1 所示的界面,在该界面中,依次选择“网络”选项卡、“文档”选项卡,点击对应网址后,查看标头里面的 User Agent,这就是需要设置的网络请求参数。图 1 网页的检查界面姜庆玲,等:基于 Python 和 Requests 快速获取网页数据的方法研究现代信息科技8月下16期.indd 101现代信息科技8月下16期.indd 1
13、012023/8/15 17:38:172023/8/15 17:38:17102102第 16 期现代信息科技2023.082023.08User Agent 简称 UA,表示用户代理,是软件提供的一个标识自己身份的标识符,包含了用户正在使用的设备以及软件的一些信息,例如浏览器、版本、浏览器渲染引擎等。不同的浏览器其 User Agent 不同,因此需要在发送请求之前设置好该参数。2.3 发送网络请求网络请求主要用于资源访问、接口数据的请求、传下载文件等操作。常见的请求方式主要包括GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS 等,其 中 GET
14、 和 POST 请求使用最频繁。2.3.1 GET 请求方式GET 请求主要用于获取资源,对服务器上资源不会产生影响,它可以把请求的一些参数信息拼接在 URL 上,传递给服务器,由服务器端进行参数信息解析,然后返回相应的资源给请求者。需要注意的是,GET 请求拼接的 URL 数据大小和长度是有最大限制的,传输的数据量一般限制在 2 KB。2.3.2 POST 请求方式POST 请求执行提交信息、传输信息的操作,对服务器上资源会产生影响,一般用于例如注册、登录、上传文件(百度云盘)等操作。POST 请求传递的一些数据和参数不是直接拼接在 URL 后的,而是放在 Http 请求 Body 里。相对
15、 GET 请求来说,POST 请求比较安全,并且传递的数据大小和格式是无限制的。本文中获取网页数据并不需要修改服务器上资源,不需要严格的安全性要求,且需要传递的数据量并不大,综合考虑后,采用GET方式发送网络请求。2.4 判断网络请求状态码在 Requests 模块中,常见的网络请求状态码如表 1 所示。表 1 常见的网络请求状态码状态码英文名称中文描述200OK请求成功400Bad Request客户端发出的请求有语法错误,服务器无法解析404Not Found服务器无法根据客户端的请求寻找资源500Internal Server Error 服务器内部错误,无法完成请求如果状态码是 200
16、,则应该将请求返回的结果保存起来,使用 Python 中的 with 语句实现:with open(保存路径,读取模式)as f:f.write(需要保存的内容)其中读取模式有 b(二进制)、r(只读),w(只写),a(追加),如果最后有+号,表示文档可读可写。其中,需要注意的是,写入一般会覆盖原文件,追加则在原文件尾部开始写,如果文件不存在,w,w+,a,a+,wb 会创建新文件。2.5 解码数据网页中有些数据在返回的过程中存在加密的代码,那么这样就无法得到想要的数据,这事就需要解码,例如将返回的内容存为 txt 文本格式,一般需要解码为“UTF-8”的格式,这时需要使用decode(utf
17、8)实现。3 获取网页数据的具体实现3.1 编程环境本文在 Window 10 操作系统下安装 Python 3.7.4版本,集成开发环境 IDE 使用 PyCharm Community版本,浏览器使用 Chrome。在 PyCharm 中创建项目,并安装 Requests 库,安装成功后如图 2 所示。图 2 安装 Requests 库后的项目环境3.2 获取网页源代码文本以获取百度页面的代码为例,其网址为“https:/”。如果想获取其源代码,可以发现右键查看源代码,并不是真正的源代码,是服务器经过解析后返回的代码,如图 3 所示。那么想得到真正的源代码就必须在服务器解析之前就获取,使用
18、 Requests 库发送请求就可以实现,按照上述步骤,获取网址后,设置对应的 User Agent为“Mozilla/5.0(Windows NT 10.0;Win 64;x 64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/111.0.0.0 Safari/537.36”,编写 Python 代码如下:import requests#导入 requests 库#1.网址 URLurl=https:/#2.设置请求参数headers=现代信息科技8月下16期.indd 102现代信息科技8月下16期.indd 1022023/8/15 17:38:1
19、72023/8/15 17:38:171031032023.082023.08第 16 期 User-Agent:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/111.0.0.0 Safari/537.36#3.发送 GET 请求获取页面res=requests.get(url,headers=headers)#4.保存返回内容content=res.content.decode(utf8)#应使用二进制 bytes 流,并解码为 utf-8#5.获取的内容进行存储with op
20、en(baidu.txt,w)as f:f.write(content)图 3 百度页面右键的查看源代码运行程序后,会在当前程序的同级目录下生成一个“baidu.txt”的文本文件,内容如图 4 所示。图 4 获取百度页面源代码文本将上述文件另存为 UTF-8 格式后,修改后缀名为“html”,再打开就是一个静态的百度页面。3.3 获取网页图片以获取百度图片中“萌宠”图片为例,选择器任意一张图片并右键复制链接地址,根据选择的图片地址,编写代码如下:import requestsurl=https:/ NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,like
21、 Gecko)Chrome/111.0.0.0 Safari/537.36res=requests.get(url,headers=headers)print(res)content=res.content#图片是二进制文件,因此不用解码#保存图片文件with open(animal.png,wb)as f:f.write(content)运行结果如图 5 所示。图 5 保存的图片(下转108页)姜庆玲,等:基于 Python 和 Requests 快速获取网页数据的方法研究现代信息科技8月下16期.indd 103现代信息科技8月下16期.indd 1032023/8/15 17:38:18
22、2023/8/15 17:38:18108108第 16 期现代信息科技2023.082023.08div6/div2/div2/div2/ul/div3/span1/a/img).Attribute(src)”。同样的原理,本文也分析了查询结果的“标准名称”一列的元素,其对应代码为 GB/T18810-2002 糙米,代码中“ ”在超文本标记语言中是指输出一个不换行空格。标准名称一列元素均为 Text 纯文本字段,内容即是标准的全程。可以利用程序对文本进行抓取并赋值到对应单元格,获取标准全称。利用浏览器开发人员工具,获取其完整 Xpath 为/html/body/div6/
23、div2/div2/div2/ul/div3/span1/a,具体实现,也是通过和上述一致的 driver.FindElementByXPath 语句来实现。完整代码为“driver.FindElementByXPath(/html/body/div6/div2/div2/div2/ul/div3/span1/a).Text”。事实上,不仅仅是标准的有效性的信息以及标准号码所对应的全名,对于标准的发布日期和实施日期等信息,也可以采取类似的方法,获取对应元素的 Xpath,利用 driver.FindElementByXPath 语句,返回对应元素的各种属性的值,通过程序自动化完成信息的识别,判
24、断和保存。为了防止标准查新网站的资源耗尽,本程序设置了浏览器的查询间隔,在实际使用过程中,不建议为了减少查新时间,缩短本文所述程序的设定值。由于此原因,本文所述的方法,理论上 1 分钟最高可以实现 15 个标准的查新工作。也就是说,本例实际完成 150 个标准的查新工作,仅需要 10 余分钟就可以完成。2 结 论本文对食品行业检验检测机构标准查新工作,程序烦琐,效率低下的问题,开发了一种采用Excel 实现机构标准的自动化查新工作的方法。本文所述方法,使用门槛较低,程序自动化程度较高,能够及时准确获取标准的有效信息,利于操作者对信息进行分析和加工,提高标准查新的工作效率。可以很好地填补食品行业
25、检验检测机构,利用计算机和互联网实现标准自动查新的这一空白。不仅是标准查新工作,对于食品检验检测行业从业人员来说,除了基本的检验检测业务之外,还存在大量的如管理体系运行、实验室药品管理、报告管理等繁杂琐碎的工作。很多工作人工开展,不仅容易出错,还需要层层审核,效率低下,如何高效准确开展工作,是检验检测机构亟须解决的问题之一。检验检测机构利用好计算机和互联网来处理这些工作,提高工作效率和质量,将是一种较好的解决办法。参考文献:1 周建团.标准对检验检测机构的重要性 J.发展,2017(6):61-62.2 周洁,华添翼,朱洁,等.浅谈检验检测机构方法变更中的方法验证 J.中国检验检测,2020,
26、28(6):89-90+88.3 陈薇,桑彤,陆敏仪.标准查新和标准确认体系的建立对检验/检测机构的重要性J.中国药事,2015,29(4):369-373.4 李骏,张鸽,纪海婷,等.Python 在标准查新中的应用 J.科技创新与应用,2020(12):184-186.5 杜菁,武文芳,周震数据库技术与应用新概念教程:第 2 版 M.北京:中国铁道出版社,2016.6 王旭丽.基于 Selenium 的自动化程序设计与实现 J.现代信息科技,2022,6(22):12-15+21.作者简介:王群(1992),男,汉族,湖北竹山人,硕士研究生,研究方向:食品安全;通讯作者:陈艳芳(1980)
27、,女,汉族,湖北竹山人,工程师,本科,研究方向:食品安全。4 结 论本文通过 Python 语言结合 Requests 模块实现了简单的网页中源代码文本和图片数据的获取,经试验验证,本文使用的实现思路、步骤和代码编写均简单易学,实现效果较好。在“互联网+”和大数据时代背景下,能够为学习爬虫框架、获取大量网络数据并进行数据分析、深入研究大数据和人工智能技术奠定数据基础。参考文献:1 邓晓璐,姚松.基于 Scrapy 的新浪微博数据爬虫研究 J.现代信息科技,2023,7(3):44-47.2 曾水新,黄日胜.基于 Scrapy 的房产信息爬取系统设计 J.电脑编程技巧与维护,2022(12):2
28、6-28.3 胡学军,李嘉诚.基于 Scrapy-Redis 的分布式爬取当当网图书数据 J.软件工程,2022,25(10):8-11.4 魏海昱,林伟鸿,贺超波.基于 Scrapy 的食品安全舆情数据爬取与分析 J.现代计算机,2022,28(14):49-54+95.5 伍高巍,刘杰,葛晓龙,等.基于 Scrapy 的研招网硕士目录爬虫的设计与实现 J.电脑知识与技术,2022,17(18):53-55.6 杨健,陈伟.基于 Python 的三种网络爬虫技术研究 J.软件工程,2023,26(2):24-27+19.作者简介:姜庆玲(1991.05),女,汉族,湖北孝感人,教师,硕士,研究方向:计算机基础应用,数据分析与数据挖掘。(上接103页)现代信息科技8月下16期.indd 108现代信息科技8月下16期.indd 1082023/8/15 17:38:192023/8/15 17:38:19