【21天python打卡】第12天 网络python(3)

简介: ​​大家好,今天是21天python打卡的第12天,上一篇讲了python正则表达式,今天来讲讲requests的用法。

Python requests 模块是什么

Python 或网络请求时,最先接触的第三方库就是 requests,该库开源地址为:https://github.com/psf/requests

官方的 solgan 为 Requests is a simple, yet elegant, HTTP library。


我们在日常编码的过程中,经常执行的一个操作就是查询手册,

requests 库提供了中文手册 - https://docs.python-requests.org/zh_CN/latest/,因此大幅度降低了学习的难度。


不过中文翻译夹带了不少翻译者的情绪化文字,阅读的时候忽略即可。


怎么用

请求参数以及请求方法

导入requests库之后,你首先学习到的就是requests.get() 方法,下面首先从 get 方法的参数开始学习,

下述内容在官方手册没有呈现清单,学习的时候可以直接查阅 requests 模块最新版的源码。

除 url 参数外,其余都为可选参数,即非必选。

url:请求地址;

params:要发送的查询字符串,可以为字典,列表,元组,字节;

data:body 对象中要传递的参数,可以为字段,列表,元组,字节或者文件对象;

json:JSON 序列化对象;

headers:请求头,字典格式;

cookies:传递 cookie,字段或 CookieJar 类型;

files:最复杂的一个参数,一般出现在 POST 请求中,格式举例 "name":文件对象 或者 {'name':文件对象},还可以在一个请求中发送多个文件,不过一般爬虫场景不会用到;

auth:指定身份验证机制;

timeout:服务器等待响应时间,在源码中检索到可以为元组类型,这个之前没有使用过,即 (connect timeout, read timeout);

allow_redirects:是否允许重定向;

proxies:代理;

verify:SSL 验证;

stream:流式请求,主要对接流式 API;

cert:证书。


以上内容就是 GET 请求中可以配置的参数,除了 GET 请求外,requests 还内置了其他的服务器请求方式,

这些方法需要的参数与上述清单一致。


GET, OPTIONS, HEAD, POST, PUT, PATCH, DELETE


在 Python 爬虫的实战当中,主要以 GET 与 POST 为主,

常用的参数为:url,params,data,headers,cookies,timeout,proxies,verify。


响应对象的属性与方法

使用 requests 库请求之后,会得到一个 Response 对象,掌握该对象的技巧就是了解其属性与方法,

通过 dir() 函数可以获取 Response 对象的属性和方法。


help(res)
print(dir(res))

获取到的内容如下所示,其中有我们之前案例中常见的一些内容。

['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '其余内容自行查询']

如果只将 requests 库应用在python采集领域,那上述属性与方法中,比较常用的有:

属性 property


ok:只要状态码 status_code 小于 400,都会返回 True;

is_redirect:重定向属性;

content:响应内容,字节类型;

text:响应内容,Unicode 类型;

status_code:响应状态码;

url:响应的最终 URL 位置;

encoding:当访问 r.text 时的编码;


方法

  • json():将响应结果序列化为 JSON;


会话对象

在本专栏前面的文章中,存在一个被忽略的 requests 高级特性,即会话对象,

该对象能够在跨域请求的时候,保持住某些参数,尤其是 cookie,如果你想向同一主机发送多个请求,

使用会话对象可以将底层的 TCP 连接进行重用,从而带来显著的性能提升。


会话对象使用非常简单,在发起 requests 对象之前,增加如下所示代码即可。


# 建立会话对象
s = requests.Session()
# 后续都使用会话对象进行进行,而不是直接使用 requests 对象
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get("http://httpbin.org/cookies")
print(r.text)

由于专栏前面并未涉及相关案例,故直接引入官方手册案例说明。

下述代码演示的是 会话也可用来为请求方法提供缺省数据,顾名思义就是直接给会话对象增加的请求参数,

在后续代码中默认可用。

import requests
s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})
# both 'x-test' and 'x-test2' are sent
r = s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
print(r.text)

接下来官网案例还展示了 方法级别的参数也不会被跨请求保持,即在 s.get() 方法中如果传递了 cookie,那不会被保持住,

这两个案例,从正面与反面为我们核心展示的就是,如何使用会话对象保持参数,

通过会话对象的属性设置的参数,能被保持,而通过会话对象方法传递的参数,不能被保持。


SSL 证书验证,客户端证书,CA 证书

在采集数据的过程中,碰到 https 的网站在正常不过,requests 库使用过程中 SSL 验证是默认开启的,

如果证书验证失败,即抛出 SSLError错误。


不过在实战的时候,我们可以通过设置 verify = False ,忽略对 SSL 证书的验证。

部分场景无法忽略证书,必须增加相关证书逻辑。


代理

有的网站在采集过程中,会针对 IP 进行限制,此时就需要使用代理进行跳过操作,设置 proxies 参数即可,

本部分内容比较简单,后续很多案例还会复用到。


除了 HTTP 代理外, requests 2.10 版本之后,增加了 SOCKS 代理,如果你需要使用,需要通过 pip 安装相应库。

pip install requests[socks]

安装完毕,出现新的第三方库 PySocks,使用方式与 HTTP 代理一致。


python采集过程会大量的与 cookie 打交道,获取网站响应的 cookie,使用 response 对象的 cookies 属性即可。

如果希望向服务器传递 cookie,可以通过 cookies 参数,例如下述代码:

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)

如果你希望对 cookie 有更加细致的操作,重点研究 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.org/zh_CN/latest/api.html#requests.cookies.RequestsCookieJar 查询。


今天就介绍到这里,下一篇我们继续介绍关于requests-html 的用法。


相关文章
|
5天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
111 55
|
1月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
1月前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
74 2
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
105 6
|
15天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
93 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
15天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
42 3
|
20天前
|
网络安全 Python
Python网络编程小示例:生成CIDR表示的IP地址范围
本文介绍了如何使用Python生成CIDR表示的IP地址范围,通过解析CIDR字符串,将其转换为二进制形式,应用子网掩码,最终生成该CIDR块内所有可用的IP地址列表。示例代码利用了Python的`ipaddress`模块,展示了从指定CIDR表达式中提取所有IP地址的过程。
35 6
|
23天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
48 8
|
22天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
78 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络