requests库的基础使用

时间:2019-11-06
本文章向大家介绍requests库的基础使用,主要包括requests库的基础使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.requests简介

Requests是一个优雅而简单的Python HTTP库,专为人类而构建,requests的使用方式非常的简单、直观、人性化,让程序员的精力完全从库的使用中解放出来。

Requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:http://cn.python-requests.org/zh_CN/latest/。 英文文档:http://docs.python-requests.org/en/master/api/

首先打开requests库的源码

def request(self, method, url,
            params=None, data=None, headers=None, cookies=None, files=None,
            auth=None, timeout=None, allow_redirects=True, proxies=None,
            hooks=None, stream=None, verify=None, cert=None, json=None)

Requests的请求不再像urllib一样需要去构造各种Request、opener和handler,使用Requests构造的方法,并在其中传入需要的参数即可。每一个请求方法都有一个对应的API,比如GET请求就可以使用get()方法,而其他的请求类型,都有各自对应的方法:

import requests

req1 = requests.get("https://www.baidu.com")
req2 = requests.post("https://www.baidu.com")
req3 = requests.put("https://www.baidu.com")
req4 = requests.delete("https://www.baidu.com")

2.发送请求和传入参数

我们可以直接往传入headers,我们以简书网为例:

# 自定义headers
headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
}
# 自定义cookies
cookies = {
    "cookie": "sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216e2b34f5c5357-040290e0015209-7373e61-1049088-16e2b34f5c6470%22%2C%22%24device_id%22%3A%2216e2b34f5c5357-040290e0015209-7373e61-1049088-16e2b34f5c6470%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; __yadk_uid=Xtd0BZTUL8a4fZOfayVfSgHUbAlRlIyC; signin_redirect=https%3A%2F%2Fwww.jianshu.com%2F; read_mode=day; default_font=font2; locale=zh-CN; Hm_lvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1572683291,1572878893,1572910084,1573038354; Hm_lpvt_0c0e9d9b1e7d617b3e6842e85b9fb068=1573038354"
}

# 对简书网发送请求
req = requests.get("https://www.jianshu.com", headers=headers, cookies=cookies)

在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问。

req = requests.get("https://www.jianshu.com", headers=headers, cookies=cookies,allow_director=False)

当我们需要使用代理时,同样构造代理字典,传递给proxies参数,自定义proxies参数,porxies = {"http":"id:port"}

3.接受响应

通过Requests发起请求获取到的是request对象,我们可以通过text直接读取到字符串格式的响应内容,或用content获取原始的二进制数据。Requests会自动的根据响应的报头来猜测网页的编码是什么,然后根据猜测的编码来解码网页内容,基本上大部分的网页都能够正确的被解码。而如果发现text解码不正确的时候,就需要我们自己手动的去指定解码的编码格式。如下:

import requests

# 对简书网发送请求 req = requests.get("https://www.jianshu.com", headers=headers, cookies=cookies) # text读取内容 req.encoding = "utf-8" res = req.text print(res)

或者用content方法获取二进制数据

# content读取响应内容
res = req.content.decode()
print(res)

除了查看响应内容之外,我们还可以单独地查看请求头中的headers,encoding,url,status code等

res_code = req.status_code
res_encoding = req.encoding
res_header = req.headers["Connection"]
res_headers = req.headers
res_url = req.url

print(res_code)
print(res_encoding)
print(res_headers)
print(res_url)

4.session对象

在Requests中,实现了Session(会话)功能,当我们使用Session时,能够像浏览器一样,在没有关闭关闭浏览器时,能够保持住访问的状态。 这个功能常常被我们用于登陆之后的数据获取,使我们不用再一次又一次的传递cookies。

首先我们需要去生成一个Session对象,然后用这个Session对象来发起访问,发起访问的方法与正常的请求是一摸一样的。

session = requests.session()
req = session.get("http://www.baidu.com")
req.encoding = "utf-8"
res = req.text
print(res)

同时,需要注意的是,如果是我们在get()方法中传入headers和cookies等数据,那么这些数据只在当前这一次请求中有效。如果你想要让一个headers在Session的整个生命周期内都有效的话,需要用以下的方式来进行设置:

# 实例一个对象
session = requests.session()

# 设置整个headers
session.headers = {
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
}
# 增加一条header
session.headers.update({"x-test":"true"})

req = session.get("http://www.jianshu.com",headers=session.headers)
req.encoding = "utf-8"
res = req.text
print(res)

原文地址:https://www.cnblogs.com/zgzeng/p/11808185.html