当前位置: 首页 > 后端技术 > Python

Python知识点、Python请求模块

时间:2023-03-25 23:04:51 Python

Python请求模块什么是Python请求模块?Python爬虫或者网络请求的时候,第一个接触到的第三方库就是requests。这个库的开源地址是:https://github.com/psf/requests,官方的solgan是Requests,是一个简单但不失优雅的HTTP库。在日常编码过程中,我们经常进行的操作之一就是查询手册。requests库提供了中文手册-https://docs.python-requests....,大大降低了学习难度。但汉译中含有大量译者的感情用语,阅读时可忽略不计。如何使用请求参数和请求方法导入requests库后,首先要学习的是requests.get()方法。让我们从get方法的参数开始。以下内容官方手册中没有列出,大家可以直接学习查看最新版requests模块的源码。除了url参数,其余都是可选参数,即不是必须的。url:请求地址;params:要发送的查询字符串,可以是字典、列表、元组或字节;data:body对象中要传递的参数,可以是字段、列表、元组、字节或文件对象;json:JSON序列化对象;headers:请求头,字典格式;cookies:传递cookie、field或CookieJar类型;files:最复杂的参数,一般出现在POST请求中,格式示例"name":fileobjector{'name':fileobject},也可以一次请求发送多个文件,但一般不会用到爬虫场景;auth:指定认证机制;timeout:服务器等待响应的时间,在源码中获取可以是Tuple类型,之前没用过,即(connecttimeout,readtimeout);allow_redirects:是否允许重定向;代理:代理;验证:SSL验证;stream:流式请求,主要连接流式API;证书:证书。以上内容为GET请求中可以配置的参数。除了GET请求,requests还有其他内置的服务器请求方式。这些方法所需的参数与上面的列表一致。GET、OPTIONS、HEAD、POST、PUT、PATCH、DELETE在Python爬虫实战中主要用到GET和POST。常用的参数有:url、params、data、headers、cookies、timeout、proxies、verify。response对象的属性和方法使用requests库请求后,会得到一个Response对象。掌握这个对象的技巧就是了解它的属性和方法。您可以通过dir()函数获取Response对象的属性和方法。help(res)print(dir(res))得到的内容如下,包括我们之前案例中的一些常见内容。['__attrs__','__bool__','__class__','__delattr__','__dict__','__dir__','其余内容可自行查询']如果requests库只应用于爬虫集合字段,那么在上述的属性和方法中,比较常用的有:属性propertyok:只要状态码status_code小于400,就会返回True;is_redirect:重定向属性;content:响应内容,字节类型;text:响应内容,Unicode类型;status_code:响应状态码;url:响应的最终URL位置;encoding:访问r.text时的编码;methodjson():将响应结果序列化为JSON;session对象在本专栏的前几篇文章中,有一个被忽略的请求高级特性,即Session对象,它可以在跨域请求时保留一定的参数,尤其是cookies。如果要向同一个主机发送多个请求,使用会话对象可以重用底层的TCP连接,从而带来显着的性能提升。会话对象使用起来非常简单,只需在启动请求对象之前添加以下代码即可。#建立session对象s=requests.Session()#后续使用session对象而不是直接使用requests对象s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')r=s.get("http://httpbin.org/cookies")print(r.text)由于上一期专栏没有涉及相关案例,所以直接介绍官方手册案例说明。以下代码演示会话也可用于为请求方法提供默认数据。顾名思义,就是直接添加到session对象中的请求参数,在后续代码中默认使用。importrequestsss=requests.Session()s.auth=('user','pass')s.headers.update({'x-test':'true'})#'x-test'和'x-test2'aresentr=s.get('http://httpbin.org/headers',headers={'x-test2':'true'})print(r.text)接下来官网案例也展示了方法级别不会跨请求保存参数,即如果在s.get()方法中传入了cookie,则不会保存。这两个案例,从前面和后面,告诉我们如何使用session对象保留参数,通过session对象的属性设置的参数可以保留,但是通过session对象方法传递的参数不能保留。SSL证书校验、客户端证书、CA证书爬虫采集数据过程中,遇到https的网站是正常的。但是在使用requests库的过程中默认开启了SSL验证。如果证书验证失败,将抛出SSLError错误。但是在实战中,我们可以通过设置verify=False来忽略SSL证书的校验。某些场景不能忽略证书,需要添加相关的证书逻辑。一些代理网站在采集过程中会限制IP。这时候就需要使用代理跳过操作,设置proxies参数。这部分内容比较简单,在后续的很多案例中都会复用到。requests2.10之后除了HTTP代理外,还增加了SOCKS代理。如果需要使用,需要通过pip安装相应的库。pipinstallrequests[socks]安装完成,出现了一个新的第三方库PySocks,使用方式和HTTP代理一样。cookie爬虫收集过程会处理大量的cookie,获取网站响应的cookie,使用响应对象的cookies属性。如果要向服务器传递cookies,可以传递cookies参数,比如下面的代码:url='http://httpbin.org/cookies'cookies=dict(cookies_are='working')r=requests.get(url,cookies=cookies)如果想对cookies进行更详细的操作,关注requests.cookies.RequestsCookieJar对象即可。简单的代码用法如下:jar=requests.cookies.RequestsCookieJar()jar.set('tasty_cookie','yum',domain='httpbin.org',path='/cookies')jar.set('gross_cookie','blech',domain='httpbin.org',path='/elsewhere')url='http://httpbin.org/cookies'r=requests.get(url,cookies=jar)print(r.text)RequestsCookieJar对象有更丰富的接口,适合跨域、跨路径使用。相关接口可以在https://docs.python-requests....查询。requests非常适合作为Python爬虫入门阶段的首选。其简洁的接口和代码封装可以大大降低编写网络请求代码的难度,让您专注于目标数据的提取。还有基于高级请求的封装作为改进的部分。这个库完全可以贯穿你整个爬虫工程生涯。完善场景requests模块目前在Python爬虫领域非常流行,很多简单的界面开发也会基于它来实现。因此,这个模块非常重要,需要牢牢掌握以上内容。欢迎想要学习编程的朋友关注Python技术大本营获取更多技能和教程。