Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python requests模块HTTP请求

Python的requests模块是一个简单好用的HTTP库,用来向网站发送各种请求。相比Python自带的urllib库,requests用起来更加方便直观。


安装和导入

首先需要安装requests模块。在命令行中输入:

pip install requests

安装完成后,在Python代码中导入:

import requests

每次调用 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 方法

requests 方法如下表:

方法描述
delete(urlargs)发送 DELETE 请求到指定 url
get(urlparams, args)发送 GET 请求到指定 url
head(urlargs)发送 HEAD 请求到指定 url
patch(urldata, args)发送 PATCH 请求到指定 url
post(urldata, json, args)发送 POST 请求到指定 url
put(urldata, args)发送 PUT 请求到指定 url
request(methodurlargs)向指定的 url 发送指定的请求方法

发送GET请求

GET请求是最常用的请求类型,用于获取网页内容。

import requests

# 发送GET请求
response = requests.get('https://www.fly63.com/')

# 显示网页内容
print(response.text)

这段代码会获取fly63网站的首页内容并显示出来。


理解响应对象

每次发送请求后,都会返回一个response对象,包含服务器的响应信息。

import requests

response = requests.get('https://www.fly63.com/')

# 状态码
print("状态码:", response.status_code)

# 响应头信息
print("响应头:", response.headers)

# 网页内容
print("网页内容:", response.text[:200])  # 只显示前200个字符

# 编码方式
print("编码:", response.encoding)

# 请求的URL
print("请求URL:", response.url)


重要的响应属性

response对象有很多有用的属性和方法:

  • status_code - HTTP状态码(200表示成功,404表示找不到页面)

  • text - 网页的文本内容

  • content - 网页的二进制内容

  • headers - 服务器的响应头

  • cookies - 服务器返回的cookies

  • url - 实际请求的URL地址

  • encoding - 网页的编码方式

  • elapsed - 请求花费的时间


处理JSON数据

很多网站接口返回JSON格式的数据,requests可以自动解析:

import requests

# 请求JSON数据
response = requests.get('https://api.fly63.com/data.json')

# 直接获取JSON对象
data = response.json()

print("网站名称:", data.get('name'))
print("网站数量:", data.get('num'))


传递URL参数

在请求中传递参数有两种方式:

import requests

# 方法1:直接拼接URL
response = requests.get('https://www.fly63.com/search?q=python')

# 方法2:使用params参数(推荐)
params = {'q': 'python', 'page': 1}
response = requests.get('https://www.fly63.com/search', params=params)

print("实际请求的URL:", response.url)


设置请求头

有些网站会检查请求头信息,需要模拟浏览器访问:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}

response = requests.get('https://www.fly63.com/', headers=headers)
print(response.status_code)


发送POST请求

POST请求用于向服务器提交数据:

import requests

# 简单的POST请求
response = requests.post('https://www.fly63.com/login')
print(response.text)


提交表单数据

向网站提交表单数据:

import requests

# 表单数据
form_data = {
    'username': 'testuser',
    'password': 'testpass',
    'remember': '1'
}

response = requests.post('https://www.fly63.com/login', data=form_data)

if response.status_code == 200:
    print("登录成功")
else:
    print("登录失败")


提交JSON数据

向API接口发送JSON数据:

import requests
import json

json_data = {
    'title': '测试文章',
    'content': '这是文章内容',
    'author': '张三'
}

headers = {'Content-Type': 'application/json'}
response = requests.post('https://api.fly63.com/articles', 
                        json=json_data, 
                        headers=headers)

print("响应状态:", response.status_code)
print("响应内容:", response.text)


处理cookies

获取和使用cookies:

import requests

# 发送请求获取cookies
response = requests.get('https://www.fly63.com/')
print("Cookies:", response.cookies)

# 使用cookies发送后续请求
cookies = response.cookies
new_response = requests.get('https://www.fly63.com/user', cookies=cookies)


设置超时时间

避免请求长时间等待:

import requests

try:
    # 设置3秒超时
    response = requests.get('https://www.fly63.com/', timeout=3)
    print("请求成功")
except requests.exceptions.Timeout:
    print("请求超时")
except requests.exceptions.RequestException as e:
    print("请求错误:", e)


错误处理

完善的错误处理让程序更健壮:

import requests

try:
    response = requests.get('https://www.fly63.com/notfound')
    response.raise_for_status()  # 如果状态码不是200,抛出异常
except requests.exceptions.HTTPError as err:
    print(f"HTTP错误: {err}")
except requests.exceptions.ConnectionError as err:
    print(f"连接错误: {err}")
except requests.exceptions.Timeout as err:
    print(f"超时错误: {err}")
except requests.exceptions.RequestException as err:
    print(f"其他错误: {err}")


文件上传

使用requests上传文件:

import requests

# 上传文件
files = {'file': open('example.txt', 'rb')}
response = requests.post('https://www.fly63.com/upload', files=files)

print("上传状态:", response.status_code)


文件下载

下载网络文件到本地:

import requests

url = 'https://www.fly63.com/images/logo.png'
response = requests.get(url)

# 保存文件
with open('logo.png', 'wb') as f:
    f.write(response.content)

print("文件下载完成")

带进度显示的文件下载:

import requests

def download_file(url, filename):
    response = requests.get(url, stream=True)
    total_size = int(response.headers.get('content-length', 0))
    
    with open(filename, 'wb') as f:
        downloaded = 0
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                f.write(chunk)
                downloaded += len(chunk)
                if total_size > 0:
                    percent = (downloaded / total_size) * 100
                    print(f"下载进度: {percent:.1f}%", end='\r')
    
    print(f"\n文件已保存: {filename}")

# 使用示例
download_file('https://www.fly63.com/file.zip', 'downloaded_file.zip')


会话保持

使用Session对象保持会话状态:

import requests

# 创建会话
session = requests.Session()

# 登录
login_data = {'username': 'user', 'password': 'pass'}
session.post('https://www.fly63.com/login', data=login_data)

# 后续请求会自动携带cookies
profile = session.get('https://www.fly63.com/profile')
settings = session.get('https://www.fly63.com/settings')

print("登录状态保持成功")


代理设置

通过代理服务器发送请求:

import requests

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'http://10.10.1.10:1080',
}

response = requests.get('https://www.fly63.com/', proxies=proxies)
print("通过代理请求成功")


其他HTTP方法

除了GET和POST,还支持其他HTTP方法:

import requests

url = 'https://api.fly63.com/users/123'

# PUT请求 - 更新资源
response = requests.put(url, data={'name': '新名字'})

# DELETE请求 - 删除资源
response = requests.delete(url)

# HEAD请求 - 只获取头部信息
response = requests.head(url)
print("内容类型:", response.headers.get('Content-Type'))

# OPTIONS请求 - 获取服务器支持的通信选项
response = requests.options(url)


实际应用示例

网页内容监控

import requests
import time

def monitor_website(url, keyword):
    """监控网页内容变化"""
    previous_content = ""
    
    while True:
        try:
            response = requests.get(url)
            current_content = response.text
            
            if previous_content and current_content != previous_content:
                print("网页内容已更新!")
                if keyword in current_content:
                    print(f"找到关键词: {keyword}")
            
            previous_content = current_content
            time.sleep(300)  # 每5分钟检查一次
            
        except Exception as e:
            print(f"监控错误: {e}")
            time.sleep(60)

# 开始监控
# monitor_website('https://www.fly63.com/', 'Python')

API数据获取

import requests
import json

def get_weather(city):
    """获取天气信息(示例)"""
    # 这里使用示例URL,实际使用时替换为真实API
    url = f'https://api.example.com/weather/{city}'
    
    try:
        response = requests.get(url)
        response.raise_for_status()
        
        weather_data = response.json()
        return weather_data
        
    except requests.exceptions.RequestException as e:
        print(f"获取天气信息失败: {e}")
        return None

# 使用示例
weather = get_weather('beijing')
if weather:
    print("当前天气:", weather)


性能优化建议

  1. 使用连接池:requests自动保持连接,重复请求同一网站时速度更快

  2. 设置超时:避免程序长时间等待

  3. 使用流式下载:大文件下载时使用stream=True

  4. 合理使用Session:多次请求同一网站时使用Session对象


总结

requests模块让HTTP请求变得非常简单。主要特点:

  • 语法简洁直观

  • 自动处理编码问题

  • 支持各种HTTP方法

  • 提供完善的错误处理

  • 支持会话保持和cookies管理

对于网页抓取、API调用、自动化测试等任务,requests都是很好的选择。掌握这个模块能够大大提高开发效率。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2125

目录选择