hand
_1_5_82
4
返回栏目
1k
9k
1k
1k
5k
1k
1k
1k
1k
3k
2k
1k
0.8k
2k
3k
1k
1k
0.7k
0.9k
1k
0.6k
0.4k
0.4k
0.3k
3k
2k
9k
0.4k
0.4k
0.8k
0.5k
3k
5k
1k
2k
2k
3k
5k
1k
1k
0.4k
0.5k
0.4k
0.6k
0.7k
1k
0.4k
0.3k
4k
0.5k
0k
0.3k
0k
0.2k
0.2k
0.3k
0.9k
0.9k
0.1k
0.9k
0.9k
1k
0.5k
6k
0.3k
0.4k
0.7k
0.6k
8k
3k
1k
1k
1k
1k
0k
2k
1k
1k
0.2k
5k
4k
5k
0.4k
0.8k
1k
1k
1k
0.1k
2k
1k
2k
6k
0k
2k
7k
1k
5k
2k
3k
1k
0k
1k
0.9k
0.4k
0.2k
1k
3k
4k
1k
1k
1k
2k
3k
0.7k
0.3k
0.5k
0.6k
1k
0.9k
3k
0.3k
4k
返回python栏目
作者:
贺及楼
成为作者
更新日期:2024-12-02 10:56:39
Python 的 requests
库是一个简单易用的HTTP客户端,用于发送各种HTTP请求。它支持会话管理、持久连接、文件上传、Cookie处理等,并且可以自动处理JSON数据。requests
库的API设计直观,文档齐全,使得进行网页内容获取、API交互、网络调试等操作变得轻松。它广泛应用于数据抓取、网络服务测试和自动化脚本中,是Python网络编程中最受欢迎的库之一。
pip install requests
包名 | 中文名 | 释义 | url |
---|---|---|---|
requests==2.32.3 | / | / | |
├── certifi [required: >=2017.4.17, installed: 2024.8.30] | / | certifi 是 Python 的标准库,提供 Mozilla 可信任的 CA 证书集合。 | / |
├── charset-normalizer [required: >=2,<4, installed: 3.3.2] | / | charset-normalizer 是一个用于自动检测和规范化文本编码的 Python 库。它可以自动检测文本编码,然后将其转换为 Unicode 格式 | / |
├── idna [required: >=2.5,<4, installed: 3.10] | / | idna是Python库,用于处理国际化域名(IDN)的编码和解码。 | / |
└── urllib3 [required: >=1.21.1,<3, installed: 2.2.3] | / | urllib3是Python的HTTP客户端库,支持连接池、文件上传、长连接、HTTP/HTTPS等功能。 | 第三方库 - urllib3 - 请求库 |
有两种方法,看最后__main__
REQ(url,method) # 普通请求
# REQ_sess() # session对象
import requests
def REQ(url,method,params=None, data=None,headers=None, json_data=None, files=None, cookies=None,
auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None,stream=None, verify=None,cert=None):
try:
print("REQ")
# url
url = url
# 请求方式
method = method
# url ? 后的参数
params = params
# params = {'参数名1':'参数值1', '参数名2':'参数值2'}
# 传输的数据
data = data
# data = {"email":"111111111@163.com", "password":"111111111"}
# 使用application/form-urlencode 方式提交请求
# request.body的内容则为a=1&b=2
# json
json_data = json_data
# 使用application/json方式提交请求
# request.body的内容则为'{"a":1,"b":2}'
# 文件
files = files
# with open('xxx.jpg','rb') as f2:
# files = f2.read()
# 请求头
# headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
headers = headers
cookies = cookies
# web客户端验证
auth = auth
# auth = (账户名, 密码)
# auth=('test', '123456')
# 超时,单位秒,s
timeout = timeout
# 请求连接超时,会触发
# 读取超时,数据大超时,不会触发
# 重定向
allow_redirects = allow_redirects # True/False
# 有的url会自动跳转,所以可以用False来禁止跳转
# 代理
proxies = proxies
# 根据协议类型,选择不同的代理
# proxies = {
# "http": "http://11.11.11.11:1111",
# "https": "http://11.11.11.11:1111", }
# 私密代理, 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
# proxy = { "http": "mr_mao_hacker:sffqry9r@11.111.111.111:11111" }
# 钩子函数
hooks = hooks
# hooks = {'response': ResponseHook}
# 捎带执行(钩上)某个自定义的方法
# 还可以定义ResponseHook()函数
# 分段下载
stream = stream
# stream = False # 关闭,默认
# stream = True # 开启
# 返回时验证证书
verify = verify
# 检测是否信任,有时候会看到一些警告的网站会报警告
# verify=True
# True 表示要验证,报错的话会:
# SSLError: ("bad handshake: Error([('SSL routines',
# 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
# 请求时加上证书
cert = cert
# cert=('/path/server.crt', '/path/key')
response = requests.request(method, url,
params=params,
data=data,
headers=headers,
cookies=cookies,
files=files,
auth=auth,
timeout=timeout,
allow_redirects=allow_redirects,
proxies=proxies,
hooks=hooks,
stream=stream,
verify=verify,
cert=cert,
json=json)
# 分段下载
# f = open("file_path", "wb")
# for chunk in response.iter_content(chunk_size=512): # 按照块的大小读取
# # for chunk in response.iter_lines(): # 按照一行一行的读取
# if chunk:
# f.write(chunk)
# response.close() # 关闭连接(因为分段链接没有断)
# 查看响应内容
print(response.text)
# response.text 返回的是Unicode格式的数据
# 查看响应内容
print(response.content)
# response.content返回的字节流数据
# 返回的是服务器响应数据的原始二进制字节流
# 可以用来保存图片等二进制文件
print(response.url) # 查看完整url地址
print(response.encoding) # 查看响应头部字符编码
print(response.status_code) # 查看响应码
# Cookies
cookiejar = response.cookies
# 返回CookieJar对象:
print(cookiejar)
# <RequestsCookieJar[<Cookie BAIDUID=6B3B3B9EAA4D5555F362C3946E555555:FG=1 for .baidu.com/>,
# <Cookie BIDUPSID=6B3B3B9EAA4D2718CA521FA514B1E03E for .baidu.com/>,
# <Cookie H_PS_PSSID=88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111 for .baidu.com/>,
# <Cookie PSTM=1122223333 for .baidu.com/>,
# <Cookie BDSVRTM=0 for www.baidu.com/>,
# <Cookie BD_HOME=1 for www.baidu.com/>]>
# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print(cookiedict)
# {'BAIDUID': '6B3B3B9EAA4D5555F362C3946E555555:FG=1',
# 'BIDUPSID': '6B3A3B9ECC4D2718AC521AC222B1F03E',
# 'H_PS_PSSID': '88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111',
# 'PSTM': '1122223333',
# 'BDSVRTM': '0',
# 'BD_HOME': '1'}
return response
# 获得数据
# data = json.loads(data.text)
# print(data)
except:
print("run方法失败")
raise
def REQ_sess():
try:
print("REQ_sess")
# 数据
data = {"email":"111111111@163.com", "password":"111111111"}
# 请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
# 1. 创建session对象,可以保存Cookie值
ssion = requests.session()
# 2. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里
ssion.post("http://www.renren.com/PLogin.do", data = data)
# 3. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = ssion.get("http://www.renren.com/1111111111/profile")
# 查看响应内容
print(response.text)
# response.text 返回的是Unicode格式的数据
# 查看响应内容
print(response.content)
# response.content返回的字节流数据
# 返回的是服务器响应数据的原始二进制字节流
# 可以用来保存图片等二进制文件
# 查看完整url地址
print(response.url)
# 查看响应头部字符编码
print(response.encoding)
# 查看响应码
print(response.status_code)
# Cookies
cookiejar = response.cookies
# 返回CookieJar对象:
print(cookiejar)
# <RequestsCookieJar[<Cookie BAIDUID=6B3B3B9EAA4D5555F362C3946E555555:FG=1 for .baidu.com/>,
# <Cookie BIDUPSID=6B3B3B9EAA4D2718CA521FA514B1E03E for .baidu.com/>,
# <Cookie H_PS_PSSID=88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111 for .baidu.com/>,
# <Cookie PSTM=1122223333 for .baidu.com/>,
# <Cookie BDSVRTM=0 for www.baidu.com/>,
# <Cookie BD_HOME=1 for www.baidu.com/>]>
# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print(cookiedict)
# {'BAIDUID': '6B3B3B9EAA4D5555F362C3946E555555:FG=1',
# 'BIDUPSID': '6B3A3B9ECC4D2718AC521AC222B1F03E',
# 'H_PS_PSSID': '88888_00000_99999_36422_88888_77777_66666_66666_55555_44444_33333_22222_11111',
# 'PSTM': '1122223333',
# 'BDSVRTM': '0',
# 'BD_HOME': '1'}
return
except:
print("run方法失败")
raise
# 钩子函数
def ResponseHook(res, *args, **kwargs):
print('url', res.url)
# return # 不能返回有意义的数据哦!
if __name__ == "__main__":
REQ(url,method) # 普通请求
# REQ_sess() # session对象
python
整章节共122节
快分享给你的小伙伴吧 ~