requests之高级用法:文件上传、Cookie设置、Session保持、SSL证书验证、超时设置、身份认证
作者:YXN-python 阅读量:215 发布日期:2022-11-24
1、文件上传
requests 通过 post 实现文件上传方式如下:
import requests
url = 'https://www.httpbin.org/post'
with open('favicon1.ico', 'rb') as file:
files = {'file':file}
response = requests.post(url=url, files=files)
print(response.text)
2、Cookie 设置
requests 相比 urllib 操作 Cookie 更加简便。
获取 Cookie 方式如下
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh, Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/52.0.2743.116 Safari/537.36'
}
url = 'https://www.baidu.com'
response = requests.get(url=url, headers=headers)
print(response.cookies)
for key, value in response.cookies.items():
print(key+' = '+value)
使用 cookies 属性维持登录状态。
登录网站,将请求头中的 Cookie 内容进行复制,并将其设置到 requests.get 的请求头里面,如下所示:
import requests
headers = {
'Cookie':'xxxxxx'
}
url = 'https://github.com/'
response = requests.get(url=url, headers=headers)
print(response.text)
运行输出结果包含了需要登录才能包含的结果,说明使用 Cookie 成功模拟了 登录状态。
通过 cookies 参数来设置 Cookie 的信息。
构造 RequestsCookieJar 对象,然后使用复制的 cookies 对 Cookie 进行赋值,使用方式如下:
import requests
cookies = 'xxxxxx'
jar = requests.cookies.RequestsCookieJar()
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh, Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko)'
'Chrome/52.0.2743.116 Safari/537.36'
}
for cookie in cookies.split(';'):
key, value = cookie.split('=',1)
jar.set(key, value)
url = 'https://github.com/'
response = requests.get(url=url, cookies=jar, headers=headers)
print(response.text)
先创建了一个RequestCookieJar对象,利用split对cookie进行分割,然后利用set方法设置每条cookie的键值对。通过requests库的get方法并把RequestsCookieJar对象通过cookies参数传递到函数,实现维持登录。
3、Session 维持
直接利用 requests 库中的 get 或 post 方法可以做到模拟网页的请求,但实际上相当于打开了两个浏览器,具有不同的 Session;验证方法如下:
import requests
url = 'https://www.httpbin.org/cookies/set/username/admin001'
response = requests.get(url)
cookies = requests.get('https://www.httpbin.org/cookies')
print(cookies.text)
运行输出结果如下,多次请求不能获取设置的 cookie:
{
"cookies": {}
}
而利用 Session 对象,可以更方便的维护 Session,不用担心 Cookie问题,示例如下:
import requests
url = 'https://www.httpbin.org/cookies/set/username/admin001'
session = requests.Session()
session.get(url)
response = session.get('https://www.httpbin.org/cookies')
print(response.text)
运行输出结果如下,多次请求能够获取设置的 cookie:
{
"cookies": {
"username": "admin001"
}
}
4、SSL 证书验证
有些网站没有设置好 HTTPS 证书,或者 HTTPS 证书不被 CA 机构认可,这些网站就会出现 SSL 证书错误提示。使用 requests 库请求证书错误的网站,设置 requests 方法不验证证书,即 verify=False,则可跳过验证网站证书,从而获取网页内容:
import requests
url = 'https://ssr2.scrape.center/'
response = requests.get(url=url, verify=False)
print(response.status_code)
报出 InsecureRequestWarning 警告,但得到了请求成功的状态码:
5、超时设置
为了防止网络状况不好,服务器不能及时响应而报错,可以通过 timeout 参数设置超时时间。
import requests
url = 'https://www.httpbin.org/get'
response = requests.get(url=url, timeout=100)
print(response.status_code)
timeout 参数表示该时间范围内没有响应,就抛出timeout异常,该参数默认为 None,表示只要服务器还在运行,就不会返回超时错误。
6、身份认证
requests 库可以通过 auth 参数设置,实现身份认证功能。使用方法如下:
import requests
url = 'https://ssr3.scrape.center/'
auth = ('admin', 'admin')
response = requests.get(url=url, auth=auth)
print(response.status_code)
状态码返回 200,即表示身份认证成功;否则返回 401,表示认证失败。
7、代理设置
在大规模爬虫的时候,频繁的请求会触发网站的反爬虫机制,爬虫客户 IP 会被标记异常,通常会需要重新登录或输入验证码证明非爬虫操作,或者会被直接封禁 IP,使得一定时间内禁止访问。
requests 库可以通过 proxies 参数设置代理伪装成多个机器对网站的访问,解决反爬虫机制的影响。使用方法如下:
import requests
proxies = {
'http':'http://47.109.52.147:80',
'https':'https://47.109.52.147:80'
}
url = 'https://www.httpbin.org/get'
response = requests.get(url=url, proxies=proxies, verify = False)
print(response.status_code)
YXN-python
2022-11-24