python requests 模块
python requests 是一个常用的 http 请求库,可以方便地向网站发送 http 请求,并获取响应结果。
requests 模块比 urllib 模块更简洁。
使用 requests 发送 http 请求需要先导入 requests 模块:
import requests
导入后就可以发送 http 请求,使用 requests 提供的方法向指定 url 发送 http 请求,例如:
实例
# 导入 requests 包
import requests
# 发送请求
x = requests.get('https://www.51frw.cn/')
# 返回网页内容
print(x.text)
import requests
# 发送请求
x = requests.get('https://www.51frw.cn/')
# 返回网页内容
print(x.text)
每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容等:
print(response.status_code) # 获取响应状态码 print(response.headers) # 获取响应头 print(response.content) # 获取响应内容
更多响应信息如下:
属性或方法 说明| apparent_encoding | 编码方式 |
| close() | 关闭与服务器的连接 |
| content | 返回响应的内容,以字节为单位 |
| cookies | 返回一个 cookiejar 对象,包含了从服务器发回的 cookie |
| elapsed | 返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。 |
| encoding | 解码 r.text 的编码方式 |
| headers | 返回响应头,字典格式 |
| history | 返回包含请求历史的响应对象列表(url) |
| is_permanent_redirect | 如果响应是永久重定向的 url,则返回 true,否则返回 false |
| is_redirect | 如果响应被重定向,则返回 true,否则返回 false |
| iter_content() | 迭代响应 |
| iter_lines() | 迭代响应的行 |
| json() | 返回结果的 json 对象 (结果需要以 json 格式编写的,否则会引发错误) |
| links | 返回响应的解析头链接 |
| next | 返回重定向链中下一个请求的 preparedrequest 对象 |
| ok | 检查 "status_code" 的值,如果小于400,则返回 true,如果不小于 400,则返回 false |
| raise_for_status() | 如果发生错误,方法返回一个 httperror 对象 |
| reason | 响应状态的描述,比如 "not found" 或 "ok" |
| request | 返回请求此响应的请求对象 |
| status_code | 返回 http 的状态码,比如 404 和 200(200 是 ok,404 是 not found) |
| text | 返回响应的内容,unicode 类型数据 |
| url | 返回响应的 url |
实例
# 导入 requests 包
import requests
# 发送请求
x = requests.get('https://www.51frw.cn/')
# 返回 http 的状态码
print(x.status_code)
# 响应状态的描述
print(x.reason)
# 返回编码
print(x.apparent_encoding)
import requests
# 发送请求
x = requests.get('https://www.51frw.cn/')
# 返回 http 的状态码
print(x.status_code)
# 响应状态的描述
print(x.reason)
# 返回编码
print(x.apparent_encoding)
输出结果如下:
200 ok utf-8
请求 json 数据文件,返回 json 内容:
实例
# 导入 requests 包
import requests
# 发送请求
x = requests.get('https://www.51frw.cn/try/ajax/json_demo.json')
# 返回 json 数据
print(x.json())
import requests
# 发送请求
x = requests.get('https://www.51frw.cn/try/ajax/json_demo.json')
# 返回 json 数据
print(x.json())
输出结果如下:
{'name': '网站', 'num': 3, 'sites': [ {'name': 'google', 'info': ['android', 'google 搜索', 'google 翻译']}, {'name': '51frw', 'info': ['菜鸟教程', '菜鸟工具', '菜鸟微信']}, {'name': 'taobao', 'info': ['淘宝', '网购']}]} requests 方法
requests 方法如下表:
方法 描述| delete(url, args) | 发送 delete 请求到指定 url |
| get(url, params, args) | 发送 get 请求到指定 url |
| head(url, args) | 发送 head 请求到指定 url |
| patch(url, data, args) | 发送 patch 请求到指定 url |
| post(url, data, json, args) | 发送 post 请求到指定 url |
| put(url, data, args) | 发送 put 请求到指定 url |
| request(method, url, args) | 向指定的 url 发送指定的请求方法 |
使用 requests.request() 发送 get 请求:
实例
# 导入 requests 包
import requests
# 发送请求
x = requests.request('get', 'https://www.51frw.cn/')
# 返回网页内容
print(x.status_code)
import requests
# 发送请求
x = requests.request('get', 'https://www.51frw.cn/')
# 返回网页内容
print(x.status_code)
输出结果如下:
200
设置请求头:
实例
# 导入 requests 包
import requests
kw = {'s':'python 教程'}
# 设置请求头
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"}
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("https://www.51frw.cn/", params = kw, headers = headers)
# 查看响应状态码
print (response.status_code)
# 查看响应头部字符编码
print (response.encoding)
# 查看完整url地址
print (response.url)
# 查看响应内容,response.text 返回的是unicode格式的数据
print(response.text)
import requests
kw = {'s':'python 教程'}
# 设置请求头
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"}
# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("https://www.51frw.cn/", params = kw, headers = headers)
# 查看响应状态码
print (response.status_code)
# 查看响应头部字符编码
print (response.encoding)
# 查看完整url地址
print (response.url)
# 查看响应内容,response.text 返回的是unicode格式的数据
print(response.text)
输出结果如下:
200 utf-8 https://www.51frw.cn/?s=python+%e6%95%99%e7%a8%8b ... 其他内容...
post() 方法可以发送 post 请求到指定 url,一般格式如下:
requests.post(url, data={key: value}, json={key: value}, args)-
url 请求 url。
-
data 参数为要发送到指定 url 的字典、元组列表、字节或文件对象。
-
json 参数为要发送到指定 url 的 json 对象。
-
args 为其他参数,比如 cookies、headers、verify等。
实例
# 导入 requests 包
import requests
# 发送请求
x = requests.post('https://www.51frw.cn/try/ajax/demo_post.php')
# 返回网页内容
print(x.text)
import requests
# 发送请求
x = requests.post('https://www.51frw.cn/try/ajax/demo_post.php')
# 返回网页内容
print(x.text)
输出结果如下:
<p style='color:red;'>本内容是使用 post 方法请求的。</p><p style='color:red;'>请求时间: 2022-05-26 17:30:47</p>
post 请求带参数:
实例
# 导入 requests 包
import requests
# 表单参数,参数名为 fname 和 lname
myobj = {'fname': '51frw','lname': 'boy'}
# 发送请求
x = requests.post('https://www.51frw.cn/try/ajax/demo_post2.php', data = myobj)
# 返回网页内容
print(x.text)
import requests
# 表单参数,参数名为 fname 和 lname
myobj = {'fname': '51frw','lname': 'boy'}
# 发送请求
x = requests.post('https://www.51frw.cn/try/ajax/demo_post2.php', data = myobj)
# 返回网页内容
print(x.text)
输出结果如下:
<p style='color:red;'>你好,51frw boy,今天过得怎么样?</p>
附加请求参数
发送请求我们可以在请求中附加额外的参数,例如请求头、查询参数、请求体等,例如:
headers = {'user-agent': 'mozilla/5.0'} # 设置请求头
params = {'key1': 'value1', 'key2': 'value2'} # 设置查询参数
data = {'username': 'example', 'password': '123456'} # 设置请求体
response = requests.post('https://www.51frw.cn', headers=headers, params=params, data=data) 上述代码发送一个 post 请求,并附加了请求头、查询参数和请求体。
除了基本的 get 和 post 请求外,requests 还支持其他 http 方法,如 put、delete、head、options 等。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!