文件上传
把需要上传的文件通过 files 参数,然后携带文件发送请求
一般写法:
files = {'files': open('上传的文件名', 'rb')}
resp = requests.post('https://httpbin.org/post', files=files)
import requests
files = {'files': open('1.text', 'rb')}
resp = requests.post('https://httpbin.org/post', files=files)
print(resp.text)
Cookie获取、设置
cookie可以用来维持登录状态
获取网页的cookie
通过cookies属性,可以获取页面的cookie
import requests
resp = requests.get('https://www.baidu.com')
print(resp.cookies)
for key, value in resp.cookies.items():
print(key + '=' + value)
设置cookie
设置cookie的方法有两种,一种是直接将网页的cookie添加到请求头中,通过headers参数向网页发送请求;一种是通过cookies参数向网页发送请求。
1、直接复制cookie值,以键值对的形式添加到headers参数中
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)....",
'Cookie': 'BAIDUID=7C1B56C85D92FFC26681B66817B37D4D:FG=1; BAIDUID_BFESS=7C1B56C85D92FFC26681B66817B37D4D:FG=1; PSTM=1687362461; BIDUPSID=B47427019F13580BC08AE710C98EA314; ZFY=dHy5zoIfPGw:AdedYRmnLDtrVqRTAL723n2xriYWOwrk:C; H_PS_PSSID=39636_39648_39670_39664_39686_39677_39712_39730_39765; BD_UPN=12314753; BA_HECTOR=2001240l2la181a4a4a0a1am1ilerfd1q.....'
}
resp = requests.get('https://www.baidu.com', headers=headers)
print(resp.text)
2、通过cookies参数携带cookie发送请求
import requests
import requests.cookies
cookies = 'BAIDUID=7C1B56C85D92FFC26681B66817B37D4D:FG=1; BAIDUID_BFESS=7C1B56C85D92FFC26681B66817B37D4D:FG=1; PSTM=1687362461; BIDUPSID=B47427019F13580BC08AE710C98EA314; ZFY=dHy5zoIfPGw:AdedYRmnLDtrVqRTAL723n2xriYWOwrk:C; H_PS_PSSID=39636_39648_39670_39664_39686_39677_39712_39730_39765; BD_UPN=12314753; BA_HECTOR=2001240l2la181a4a4a0a1am1ilerfd1q'
jar = requests.cookies.RequestsCookieJar()
for cookie in cookies.split(';'):
key, value = cookie.split('=', 1)
jar.set(key, value)
resp = requests.get('https://www.baidu.com', cookies=jar)
print(resp.text)
通过cookies参数设置cookie时
1、需要将网页cookie复制下来;
2、创建requests.cookies.RequestsCookieJar()对象;
3、以 ;(分号)进行遍历cookies,利用 split() 方法进行分割
4、利用set()方法设置每个cookie条目,通过requests库的cookies参数将cookie发送出去
Session维持
session是会话的意思,当浏览的页面需要一直保持登录状态时,可以使用session保持登录的状态,而不需每一次请求页面都需要携带cookie发送请求。
import requests
# 将cooie转化为cookiejar对象
cookies = 'BAIDUID=7C1B56C85D92FFC26681B66817B37D4D:FG=1; BAIDUID_BFESS=7C1B56C85D92FFC26681B66817B37D4D:FG=1; PSTM=1687362461; BIDUPSID=B47427019F13580BC08AE710C98EA314; ZFY=dHy5zoIfPGw:AdedYRmnLDtrVqRTAL723n2xriYWOwrk:C; H_PS_PSSID=39636_39648_39670_39664_39686_39677_39712_39730_39765; BD_UPN=12314753; BA_HECTOR=2001240l2la181a4a4a0a1am1ilerfd1q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598'
jar = requests.cookies.RequestsCookieJar()
for cookie in cookies.split(';'):
key, value = cookie.split('=', 1)
jar.set(key, value)
# 1、创建session对象
session = requests.Session()
# 2、通过session的cookie属性进行设置cookie值
session.cookies.update(jar)
# 3、通过session发送请求
resp = session.get('https://www.baidu.com')
print(resp.text)
print(resp.cookies)
session设置cookie的方法 1、创建session对象 2、通过session的cookie属性进行设置cookie值 3、通过session发送请求
超时设置
为防止服务器不能及时响应,可以设置超时时间,当超过这个时间没有收到响应时,就会报错
import requests
# 超时设置
resp = requests.get('https://www.httpbin.org/get', timeout=1)
print(resp.status_code)
请求分为两个阶段:连接和读取
timeout单独传入一个数时,指的是连接和读取的总和;也可以传入一个元组,单独设置连接和读取的时间,还可以将它设置为none,此时将不会返回超时错误
import requests
# 超时设置
resp = requests.get('https://www.httpbin.org/get', timeout=(5, 30))
print(resp.status_code)
ssl认证
当遇到提示ssl证书错误提示时,可以设置verify的值为false,忽略ssl证书验证;也可以指定本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或者是一个包含两个文件路径的元组,需要注意的是本地私有的证书的key必须是解密状态的
设置verify参数为false,请求将不再验证证书是否有效
import requests
from requests.packages import urllib3
# 通过urllib3忽略警告
urllib3.disable_warnings()
# 设置verify参数为false,忽略证书验证
resp = requests.get('https://ssr2.scrape.center/', verify=False)
print(resp.status_code)
代理设置
某些网站刚开始测试请求时,都可以正常进行获取内容,当大规模进行爬取时,可能会弹出验证、封锁IP地址等问题,导致无法获取想要的内容,所以我们需要使用proxies参数,设置代理IP,防止网站对爬虫的封锁。
import requests
# 代理设置
proxies = {
"http": "http://123.182.59.227",
"https": "http://123.182.59.227"
}
resp = requests.get('https://www.httpbin.oeg/get', proxies=proxies)
print(resp.status_code)
设置代理的一般格式:
proxies = {
"http": "http://ip",
"https": "http://ip"
}