2.3.1 requests模块简介
在2.2节中讲到了HTTP协议,那么该如何模拟客户端的HTTP请求呢?这里先简单介绍下Python中的requests模块,使用该模块提供的方法就可以模拟客户端的HTTP请求。我们在学习Python模块时,可以先从它的名称含义来进行初步理解。requests是一个英文单词,它的中文释义就有请求的意思。
HTTP协议的请求方法主要有:GET,POST, PUT,DELETE。在本节教程中,会详细地讲解如何利用Python中的requests模块发送HTTP GET,以及POST请求。
requests模块遵循的Python开发哲学:
Beautiful is better than ugly.(美丽优于丑陋)
Explicit is better than implicit.(直白优于含蓄)
Simple is better than complex.(简单优于复杂)
Complex is better than complicated.(复杂优于繁琐)
Readability counts.(可读性很重要)
2.3.2 requests模块的安装
安装requests模块非常简单,直接使用Python中的PIP大法。此法名声远播,建议每一个Python程序员都学会它。我们现在进入windows命令行,在命令行中执行如下命令:
pip install requests
命令执行成功以后,进入Python交互模式,在交互模式中执行import requests,以测试是否安装成功:
D:\>python
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
同学们在进行以上操作之前,必须先在windows中安装好Python解释器,以及将Python解释器添加至系统环境变量PATH中。对于Python的安装,windows命令行的操作,Python的交互模式,pip命令的用法不是很熟悉的同学,可以学习薯条老师的《Python零基础入门指南》这本教程。关注微信公众号:【薯条编程】,即可领取这本PDF电子书。
2.3.3 requests的get方法
requests模块的get方法,可以直接在Python交互模式中进行查找:
>>> import requests
>>> help(requests.get)
Help on function get in module requests.api:
get(url, params=None, **kwargs)
Sends a GET request.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
从交互模式的输出可知,get方法主要定义了两个参数,分别是url以及params。url参数用来传递字符串类型的URL。params参数用来定义GET请求中的参数,它是一个字典类型, 默认值为None。get方法的返回值是一个Response对象,Response对象的常用属性见下表:
属性名 | 描述 |
encoding | 表示响应内容的字符编码,也可以直接对该属性赋值,以设置编码。 |
text | 返回字符串类型的响应体 |
content | 返回字节流类型的响应体 |
headers | 字典类型,存储的是http服务器的响应头 |
status_code | 表示http服务器的响应状态码 |
ok | 布尔值,表示是否操作成功 |
requests.get方法的代码实例:
# __desc__ = 通过requests模块的get方法发起HTTP GET请求 # 使用requests模块,必须先执行import进行导出 import requests # www.chipscoco.com为薯条老师的个人博客,可授权进行合法抓取 URL = "http://chipscoco.com/?id=9" response = requests.get(URL) # http状态码为200,说明请求成功 if response.status_code == 200: # 输出http服务器的响应头 print(response.headers) # 输出字符串类型的响应体 print(response.text) """ response.headers的输出: {'Date': 'Sun, 21 Jun 2020 00:12:17 GMT', 'Server': 'Apache/2.4.6 (CentOS) PHP/5.4.16', 'X-Powered-By': 'PHP/5.4.16', 'X-XSS-Protection': '1; mode=block', 'Keep-Alive': 'timeout=5, max=100', 'Connection': 'Keep-Alive', 'Transfer-Encoding': 'chunked', 'Content-Type': 'text/html; charset=utf-8'} """
response.text的输出为网页的HTML源码,源码部分内容如下图所示:
爬虫程序在抓取网页成功以后,需要进一步对HTML内容进行解析,以获取所需的数据。关于HTML的解析,会在后续的教程中进行详细讲解。同学们现在只需初步掌握requests模块的get方法,以理解爬虫的抓取过程。
2.3.4 requests的post方法
requests模块的post方法,同样可以在交互模式中进行查找:
>>> import requests
>>> help(requests.post)
Help on function post in module requests.api:
post(url, data=None, json=None, **kwargs)
Sends a POST request.
:param url: URL for the new :class:`Request` object.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) json data to send in the body of the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response:rtype: requests.Response
从help的输出可知,post方法主要定义了三个参数,分别是url,data, json。url参数用来传递字符串类型的URL。data是一个可选参数,用来传递字典,参数列表,字节流,以及文件类型的对象。json也是一个可选参数,会自动将字典类型的对象转换为json格式。
data参数与json参数均用来定义POST请求中的请求参数,关于data参数与json参数的区别,会在后续教程中进行详细讲解。post方法的返回值是一个Response对象,Response对象的常用属性,已在2.3.3节中进行讲解,不再赘述。
requests.post方法的代码实例:
# __desc__ = 通过requests模块的post方法发起HTTP POST请求 import requests """ (1) 站点的登录通常发起的是HTTP的POST请求 在本节的代码实例中,以京东商城的登录作为例子 """ URL = "https://passport.jd.com/new/login.aspx" """ (1) 定义一个全局的data对象,用来传递登录请求所需传递的参数 (2) 京东商城PC页面的登录远不止这些参数,而且涉及到参数的加密,在本节的代码中,仅演示如何发起POST请求, 在后续的教程中会详细讲解如何模拟站点登录 """ data = { "uuid": "7c52477f-66af-4902-8429-51d51f6b38c4", "loginname": "18819353206", "nloginpwd":"Thvm9iAfZ/MhW8VbEDSscBJtwxLLXCKki4g=" } # 发起POST请求,参数data用来传递请求参数 response = requests.post(URL, data) # 登录失败,代码实例仅演示如何发起POST请求
2.3.5 知识要点
(1) 在交互模式中可通过help来查看模块方法的定义
(2) 通过requests模块,可以向http服务器发起http请求。
(3) 使用requests模块的get方法发起HTTP GET请求,使用requests模块的post方法发起HTTP POST请求
2.3.6 最具实力的小班培训
薯条老师在广州有开设线下培训班,小班授课模式,一班最多6个人。也可一对一授课,全程帮助你学好计算机,实现高薪就业。不在广州的同学可提供住宿,也可以报名线上小班,用腾讯会议上直播课。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python中高级爬虫逆向工程师就业班,月薪15K-25K,包拿Offer
(3) Python数据分析+商业分析+数据科学就业班,企业级项目实战,月薪10K-20K
(4) Python量化交易就业班,A股+期货+数字货币量化,月薪10K-40K
(5) Python机器学习+深度学习算法工程师,月薪20-50K
跟薯条老师学习的学生有拿到花生日记,林氏家居,南方电网,京东, 阿里等公司的offer, 学生的最低薪资有6K,最高薪资有18K, 平均就业薪资有11000。
扫码咨询薯条老师: