python-requests

python-requests

python-requests

作用:能够模拟浏览器向服务器发送请求的库

requests库的主要方法

方法描述
requests.request()构造一个请求,支持以下各种方法
requests.get()获取html的主要方法
requests.head()获取html头部信息的主要方法
requests.post()向html网页提交post请求的方法
requests.put()向html网页提交put请求的方法
requests.patch()向html提交局部修改的请求
requests.delete()向html提交删除请求
requests.Session()session相关

请求接收的参数

requests.request(method,url,**kwargs)类能够构造一个请求,支持不同的请求方式。

给指定url发送请求

response = requests.get(url='url路径',timeout=5)
import requests

response = requests.request(method='get',url='https://www.baidu.com')
print(response.status_code) #打印返回的参数

request类中看看几个参数:

method:请求方式。

url:请求URL

**kwargs:

params:字典或者字节序列,作为参数增加到url中,使用这个参数可以把一些键值对以k1=v1&
k2=v2的模式增加到url中,get请求中用的较多。
       data:字典、字节序列或者文件对象,重点作为向服务器提供或提交资源,作为请求的请求体,与params不同放在url上不同。它也可以接受一个字符串对象。
json:json格式的数据,可以向服务器提交json类型的数据。
headers:字典,定义请求的请求头,比如可以headers字典定义user agent。
cookies:字典或者CookieJar。
auth:元组,用来支持HTTP认证功能。
files:字典,用来向服务器传输文件。
timeout:指定超时时间。
proxies:字典,设置代理服务器。
allow_redirects:开关,是否允许对URL进行重定向,默认为True。
stream:开关,是否对获取内容进行立即下载,默认为False,也就是立即下载。这里需要说明的,stream一般应用于流式请求,
比如说下载大文件,不可能一次请求就把整个文件都下载了,不现实,这种情况下,就要设置stream=True,requests无法将连接释放回连接池,除非下载完了所有数据,或者调用了response.close。
verify:开关,用于SSL证书认证,默认为True。
cert:用于设置保存本地SSL证书路径

响应对象支持的属性

import requests
response = requests.request(method='get',url='http://www.baidu.com')

当请求被发送后,会有一个response响应。requests同样为这个reponse赋予了相关方法:

response:响应对象。
response.status_code:请求返回状态码。
response.text:字符串形式的响应内容。
response.json():返回响应的是json类型的数据,如果响应的类型不是json,则抛出ValueError。
response.content:二进制的响应内容。
response.iter_content(chunk_size):生成器,在stream=True的情况下,当遍历生成器时,以块的形式返回,也就是一块一块的遍历要下载的内容。
避免了遇到大文件一次性的将内容读取到内存中的弊端,如果stream=False,全部数据作为一个块返回。chunk_size参数指定块大小。

response.iter_lines():生成器,当stream=True时,迭代响应数据,每次一行,也就是一行一行的遍历要下载的内容。同样避免了大文件一次性写入到内存中的问题。
当然,该方法不安全。至于为啥不安全,咱也不知道,咱也不敢问,主要是官网上没说!经查,如果多次调用该方法,iter_lines不保证重新进入时的安全性,因此可能会导致部分收到的数据丢失。
response.cookies:响应中的cookie信息。
response.cookies.get_dict():以字典的形式返回cookies信息。
response.cookies.items():以列表的形式返回cookies信息。
response.headers:响应头字典。取其中的指定key,response.headers.get('Content-Type', '哎呀,没取到!')
response.reqeust:请求类型。
response.url:请求的URL。
response.reason:响应HTTP状态的文本原因。
response.encoding:响应结果的编码方式。
response.encoding = “gbk”:修该响应编码方式,比如说响应结果的编码是utf-8,通过这么response.encoding = “gbk”指定为gbk。
response.apparent_encoding:根据响应字节流中去chardet库中匹配,返回编码方式,并不保证100%准确。
response.history:以列表的形式返回请求记录。列表内的请求以最老到最新排序

requests.get()

requests.get(url,params=None,**kwargs)  #发送GET请求。相关参数:
url,请求的URL.
params参数:可选url中的额外参数,字典或者字节流格式。
**kwargs:
		params:字典或者字节序列,作为参数增加到url中,使用这个参数可以把一些键值对以k1=v1&k2=v2的模式增加到url中,get请求中用的较多。
       data:字典、字节序列或者文件对象,重点作为向服务器提供或提交资源,作为请求的请求体,与params不同放在url上不同。它也可以接受一个字符串对象。
json:json格式的数据,可以向服务器提交json类型的数据。
headers:字典,定义请求的请求头,比如可以headers字典定义user agent。
cookies:字典或者CookieJar。
auth:元组,用来支持HTTP认证功能。
files:字典,用来向服务器传输文件。
timeout:指定超时时间。
proxies:字典,设置代理服务器。
allow_redirects:开关,是否允许对URL进行重定向,默认为True。
stream:开关,是否对获取内容进行立即下载,默认为False,也就是立即下载。这里需要说明的,
stream一般应用于流式请求,比如说下载大文件,不可能一次请求就把整个文件都下载了,不现实,
这种情况下,就要设置stream=True,requests无法将连接释放回连接池,除非下载完了所有数据,或者调用了response.close。
verify:开关,用于SSL证书认证,默认为True。
cert:用于设置保存本地SSL证书路径

params参数

get难免会带一些额外的参数K1=V1&K2=V2

手动拼接:

import requests

response = requests.get(url='http://www.httpbin.org/get?k1=v1&k2=v2')
print(reponse.url) #http://www.httpbin.org/get?k1=v1&k2=v2
print(response.json().get('args'))

现在我们可以使用params参数来解决这个问题

import requests
params = {"user":"张开","pwd":"666"}
response = requests.get(url='httpbin.org/get',params=params)
print(response.url)   #http://www.httpbin.org/get?user=%E5%BC%A0%E5%BC%80&pwd=666
print(response.json().get('args'))   #{'pwd':'666','user':'张开'}

headers

使用headers的目的是模拟人请求网页数据

最起码在请求头中加入user-agent

再来看看,GET请求中如何携带headers(请求头)

import requests
headers = {'user-agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"}

扒网页过程中如果,存在网页乱码情况

response.encoding = 'gbk'  #响应的数据用这种方式做转码操作
print(reponse.encoding)
print(response.text)

遇到大型文件

import requests
response = requests.get(url="https://up.ruyile.com/jy_img/bj/image/5/242/159qt158301921542923.png",timeout=5)

with open('a.ang','wb') as f:
for i in requests.iter_content(chunk_size=1):
f.wirte(i)

原文地址:https://www.cnblogs.com/g15009428458/p/12093601.html