状态码
response.status_code获取状态码
200:成功
302:临时转移至新的url
403:Forbidden
404:Not Found
500:Inter Server Error(服务器内部错误)
import requests
if __name__ == '__main__':
# 1. 定义 URL
url = "https://www.baidu.com"#200
# url = "https://www.baidu.com/abc"#404
# 2. 向 URL 发送请求
response = requests.get(url)
# 3. 打印状态码
print(response.status_code)
编码方式
if __name__ == '__main__':
"""编码"""
# 网络传输的数据都是字节类型,需要将数据先转换为字节类型
data_str = "hello world"
data_bytes = b"hello world"
print(type(data_str), type(data_bytes))
# 字符串转字节: encode
# 字节转字符串: decode
print(data_str.encode(), type(data_str.encode()))
print(data_bytes.decode(), type(data_bytes.decode()))
'''
<class 'str'> <class 'bytes'>
b'hello world' <class 'bytes'>
hello world <class 'str'>
'''
响应内容编码
response.text:获取str类型的响应
import requests
if __name__ == '__main__':
"""text 属性用法"""
# 发送请求
resopnse = requests.get("https://www.baidu.com")
print("text 数据类型:", type(resopnse.text))
# 打印响应内容
print(resopnse.text)
# 打印内容的默认编码
print("默认编码:", resopnse.encoding)
# ISO-8859-1 是英语国家使用的编码
# 需要将英语国家使用的 ISO-8859-1 编码转换为支持中文的 utf8 编码
resopnse.encoding = "utf8"
print("uft8编码:", resopnse.text)
response.content:获取bytes类型的响应
import requests
if __name__ == '__main__':
"""content 属性用法"""
# 发送请求
resopnse = requests.get("https://www.baidu.com")
# 拿到 content 数据
print("content 数据类型:", type(resopnse.content))
# 可以使用字节类型变量的 decode 函数,将其转换为字符串
print("content 转换为字符串:", resopnse.content.decode())
# 什么时候需要对 content 变量(属性) decode ?
# 如果响应的数据本身是字符串,需要 decode
# 如果响应的数据是图片、音视频文件等等,不需要 decode
推荐使用response.content.decode("utf8")方式获取响应的html界面
response.headers:获取响应头
import requests
if __name__ == '__main__':
"""header 属性"""
# 发送请求
resopnse = requests.get("https://www.baidu.com")
# 打印响应头信息
print("响应头信息:", resopnse.headers)
response.request:获取响应对应的请求
import requests
if __name__ == '__main__':
"""request 属性"""
# 发送请求
resopnse = requests.get("https://www.baidu.com")
# 打印响应头信息
print("响应中的请求头信息:", resopnse.request.headers)
'''
响应中的请求头信息: {'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
'''
发送带header的请求
为什么请求需要带header?
模拟浏览器,欺骗服务器,获取和浏览器一致的内容
如何获取header,步骤如下:
图1
图2
图3
图4
图5
注意:headers的形式是字典
import requests
if __name__ == '__main__':
"""发送带有 header 的请求"""
# 发送请求
url = "https://www.baidu.com"
'''
#通过网页查找到的headers
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
'''
#网页中的headers要通过字典的形式传入
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
}
# 发送带有 User-Agent 头信息的请求
resopnse = requests.get(url, headers=headers)
print(resopnse.request.headers)
print(resopnse.content.decode())
带参数的请求
import requests
if __name__ == '__main__':
# 发送请求
url = "https://www.baidu.com/s"
# 构造请求头、参数信息
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 = {"wd": "python"}
# 发送带有 User-Agent 头信息的请求
resopnse = requests.get(url, headers=headers, params=params)
print(resopnse.content.decode())
# 将读取到的内容写入文件
# with open("./python.html", "w") as file:
# file.write(resopnse.content.decode())