一、什么是 Requests 库?

1. 通俗理解 Requests 库

你可以把 Requests 库想象成一个 "自动浏览器"—— 它能帮你自动打开网页、获取内容,还能模拟你在网页上的操作(比如点击查询按钮)。只不过它不是用图形界面显示内容,而是把网页数据以代码的形式返回给你。

比如你想查看 "百度首页" 的内容,用 Requests 库写几行代码,就能把百度首页的所有文字、图片地址等信息都获取到,而不用你手动打开浏览器。

2. Requests库安装

在命令行下输入如下命令

pip install requests  -i https://pypi.tuna.tsinghua.edu.cn/simple(清华源)

二、Requests 库的核心用法:发送请求获取数据

1. 最基础的 GET 请求(获取网页内容)

GET 请求是最常用的功能,就像你在浏览器地址栏输入网址并按回车 —— 目的是 "获取" 网页内容。

语法格式:
import requests  # 导入Requests库

# 发送GET请求,获取网页内容
response = requests.get("目标网页的网址")

# 打印获取到的内容(网页的HTML代码)
print(response.text)
实例 1:获取百度首页内容
import requests

# 目标网址:百度首页
url = "https://www.baidu.com"

# 发送请求
response = requests.get(url)

# 打印结果(网页的HTML代码)
print(response.text)

运行后,你会看到一大串代码,这就是百度首页的 HTML 源代码 —— 所有网页都是用这种代码编写的,浏览器只是把它转换成了我们看到的图形界面。

2. 带参数的 GET 请求(像 "搜索" 一样查信息)

很多时候,我们需要在网页上 "查询" 信息(比如查手机号归属地、查天气),这时候网址里会带参数。

Requests 库可以用字典来处理这些参数,让代码更清晰。

语法格式:
import requests

# 1. 定义基础网址(不带参数的部分)
base_url = "目标网址的基础部分"

# 2. 用字典定义参数(键是参数名,值是参数内容)
params = {
    "参数1名": "参数1值",
    "参数2名": "参数2值"
}

# 3. 发送带参数的GET请求(用params参数传入字典)
response = requests.get(base_url, params=params)

# 4. 打印结果
print(response.text)
 实例 2:查询手机号归属地
import requests

# 基础网址(手机号查询的基础页面)
base_url = "https://www.ip138.com/mobile.asp"

# 定义参数:要查询的手机号和查询类型
params = {
    "mobile": "手机号",  # 要查询的手机号
    "action": "mobile"  # 固定参数,告诉网站这是手机号查询
}

# 发送带参数的请求
response = requests.get(base_url, params=params)

# 打印结果(包含归属地信息的HTML代码)
print(response.text)

 三、实战案例 :批量下载 QQ 表情包(下载图片)

1.任务目标

从http://www.bspider.top/yh31/网站下载多张表情包图片,保存到电脑的D:\表情包文件夹里。

2.准备工作

  1. 先在电脑D盘手动创建一个名为表情包的文件夹(必须做,否则会报错);
  2. 找到要下载的图片网址(可以通过浏览器开发者工具获取,这里直接提供两个示例网址)。

3.完整代码

import requests  # 导入库

def get_image(url):
    """获取单张图片的二进制数据"""
    try:
        # 发送请求,超时时间10秒
        response = requests.get(url, timeout=10)
        # 检查请求是否成功(不是200就报错)
        response.raise_for_status()
        # 返回图片的二进制数据(图片、视频都是二进制)
        return response.content
    except Exception as error:
        print(f"下载失败:{error}")
        return None

def save_image(save_path, image_data):
    """把图片数据保存到本地文件"""
    # 用二进制写入模式打开文件(图片必须用"wb"模式)
    with open(save_path, "wb") as f:
        f.write(image_data)  # 写入图片数据
    print(f"保存成功:{save_path}")

if __name__ == "__main__":
    # 要下载的图片网址列表
    image_urls = [
        "http://www.bspider.top/static/yh31/images/202103302056530751.gif",
        "http://www.bspider.top/static/yh31/images/202103182029425871.jpg"
    ]
    
    # 保存图片的文件夹(已提前创建)
    save_folder = "D:\\表情包\\"
    
    # 循环下载每张图片
    for url in image_urls:
        # 获取图片数据
        image_data = get_image(url)
        if image_data is None:  # 如果获取失败,跳过这张
            continue
        
        # 从网址中提取文件名(比如从网址中取出"202103302056530751.gif")
        file_name = url.split("/")[-1]
        
        # 拼接完整的保存路径(文件夹+文件名)
        save_path = save_folder + file_name
        
        # 保存图片
        save_image(save_path, image_data)

运行结果

打开D:\表情包文件夹,会看到两张下载好的图片,说明程序成功运行了。

注:最好在文件夹里新建文件

四、常见问题与解决方法

1. 报错 "PermissionError: [Errno 13] Permission denied"

  • 原因:保存文件的路径没有权限(比如直接保存到D盘根目录);
  • 解决:换一个路径,比如D:\文件夹名(必须提前创建文件夹)。

2. 中文显示乱码

  • 原因:网页编码没有正确识别;
  • 解决:加上response.encoding = response.apparent_encoding。

3. 报错 "requests.exceptions.ConnectionError"

  • 原因:网络断开、网址错误,或者网站被墙;
  • 解决:检查网络连接,确认网址正确(可以复制网址到浏览器打开试试)。

4. 程序运行后没有结果,或者结果为空

  • 原因:可能被网站的反爬机制拦截了;
  • 解决:加上headers参数模拟浏览器。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐