Requests库——HTTP请求库,用于发送所有种类的HTTP请求。它提供了简单易用的接口,支持各种HTTP方法,处理常见的HTTP操作,比如重定向、保持会话、处理Cookies、上传文件等。
#requests库的导入
import requests
##requests库的基本信息
print("版本:", requests.__version__)
print("许可证:", requests.__license__)
print("版权:", requests.__copyright__)
print("作者:", requests.__author__)
print("作者邮箱:", requests.__author_email__)
print("文档url:", requests.__url__)
print("标题:", requests.__title__)
print("描述:", requests.__description__)
##requests库的应用:发送get请求
HTTP='http://www.baidu.com/' #访问网址
r=requests.get(HTTP)
#http状态信息
print(r.status_code) #结果:'200'
#http响应文本,打印响应内容(HTML), 以字符串形式返回响应内容。
print(r.text)
#http响应,以字节形式返回响应内容。
print(r.content)
"""
常见的HTTP状态信息:
200-请求成功
301-资源(网页等)被永久转移到其他URL
404-请求的资源(网页等)不存在
500-内部服务器错误
"""
##requests库的应用:发送post请求
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://www.example.com/post', data=data)
print(response.status_code)
print(response.json()) # 假设服务器返回的是JSON格式数据
#http头信息headers
print(r.headers) # 返回响应头信息。
#print(type(r.headers)) #结果是:'<class 'requests.structures.CaseInsensitiveDict'>'
for k,v in r.headers.items(): #与字典一样用法
print(k,v)
#http的json信息
#原代码
#data=r.json()
#print(f'结果: {data}') #报错:'requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)'
"""
这个错误通常意味着 r.json() 方法试图解析一个空响应。
可能的原因是请求返回了空内容,或者返回的内容不是有效的 JSON 格式。
"""
#更改代码
try:
data=r.json() #将响应内容解析为JSON格式(如果内容是JSON格式)。
print(f'结果: {data}')
except requests.exceptions.JSONDecodeError as e:
print(f'报错:{e}') #结果是:'报错:Expecting value: line 1 column 1 (char 0)'
##requests的get方法
import requests as r
rh=r.get('http://www.baidu.com/')
print(rh.text)
"""
requests.get()
一些常用的参数:
1.timeout:参数指定了在请求过程中等待服务器响应的最长时间,单位是秒。如果在指定的时间内没有收到响应,请求将会被中断,并且会抛出一个 Timeout 异常。
2.headers: 请求头,可以用来传递一些 HTTP 请求头信息,如 User-Agent 等。
3.cookies: 请求中的 cookies,可以用来传递一些 cookie 信息。
4.auth: 请求的身份认证信息,可以是 HTTPBasicAuth 或 HTTPDigestAuth 对象。
5.proxies: 代理设置,可以用来指定请求时使用的代理。
6.verify: 是否验证 SSL 证书。
7.cert: 客户端证书,用于双向认证。
8.stream: 是否使用流式响应。
9.allow_redirects: 是否允许重定向。
10.params: 查询参数,用于构造 URL 查询字符串。
11.json: 请求体中的 JSON 数据,用于发送 POST 请求时的数据。
这些参数可以根据实际需求进行设置,以便更好地控制和定制请求的行为。
"""
##requests请求:避免乱码
import requests
r = requests.get('https://www.baidu.com/')
"""
将响应的编码设置为从响应内容自动检测到的编码
这样可以确保接下来的文本操作能够正确显示中文字符
"""
r.encoding = r.apparent_encoding
print(r.text)
为什么使用r.encoding = r.apparent_encoding
requests库在获取HTTP响应时,默认会根据HTTP头中的Content-Type字段来设置响应的编码。然而,有时候服务器没有正确设置编码,或者默认的编码不能正确解码响应内容。
这种情况下,直接使用默认编码可能会导致中文等非ASCII字符显示为乱码。
Note:
请求参数
在发送请求时,可以通过各种参数来定制请求:
-
params
: 用于GET请求的查询参数,传递一个字典。params = {'key1': 'value1', 'key2': 'value2'} response = requests.get('https://www.example.com', params=params)
-
data
: 用于POST请求的表单数据,传递一个字典。data = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://www.example.com/post', data=data)
-
json
: 发送JSON格式的数据。json_data = {'key1': 'value1', 'key2': 'value2'} response = requests.post('https://www.example.com/post', json=json_data)
-
headers
: 自定义请求头。headers = {'User-Agent': 'my-app/0.0.1'} response = requests.get('https://www.example.com', headers=headers)
-
cookies
: 发送自定义的Cookies。cookies = {'session_id': '123456789'} response = requests.get('https://www.example.com', cookies=cookies)
-
timeout
: 设置请求超时时间。response = requests.get('https://www.example.com', timeout=5) # 超时时间为5秒
处理文件上传
import requests
files = {'file': open('report.xls', 'rb')}
response = requests.post('https://www.example.com/upload', files=files) print(response.status_code)
会话对象
使用会话对象可以跨请求保持某些参数,比如Cookies和HTTP头。
import requests
s = requests.Session()
s.get('https://www.example.com/cookies/set/sessioncookie/123456789')
response = s.get('https://www.example.com/cookies')
print(response.text)
高级功能
身份验证
requests
库支持多种身份验证方式,如HTTP基本认证、摘要认证等。
from requests.auth import HTTPBasicAuth
response = requests.get('https://www.example.com', auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
处理重定向
默认情况下,requests
库会自动处理重定向。
response = requests.get('https://www.example.com/redirect')
print(response.url) # 最终重定向的URL
可以通过allow_redirects
参数禁用重定向。
response = requests.get('https://www.example.com/redirect', allow_redirects=False)
print(response.status_code) # 应该是3xx重定向状态码
如果你真的想当程序员那么就先写一万条代码。……《向上生长》
14号写下61条代码
目标:10,000条
剩余:9,128条
总结:
还没实操应用。(走的很慢可以,但是真的不能停下来学习。)