You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python保存并加载Requests响应与BeautifulSoup对象?

保存与加载网页请求响应的实用方案

想要避免重复爬取网站、复用之前的请求响应?这里有两种靠谱的实现方式,适配不同的需求场景:

方案1:保存原始HTML内容(推荐首选)

这种方式最通用,不依赖特定库的版本,文件体积小还能直接用文本编辑器查看,完全不用担心兼容性问题。

保存响应内容

先发起一次请求,把响应的原始字节内容保存到本地文件:

import requests

def save_raw_html(link, save_file_path):
    # 发起请求并确保请求成功
    response = requests.get(link, timeout=5)
    response.raise_for_status()  # 如果请求失败会抛出异常
    # 以二进制模式保存,避免编码乱码问题
    with open(save_file_path, 'wb') as f:
        f.write(response.content)

# 调用示例:把目标网页的响应保存到本地
save_raw_html("https://example.com", "saved_page.html")

加载并解析

需要使用时,直接读取文件内容并生成BeautifulSoup对象:

from bs4 import BeautifulSoup

def load_and_parse_html(save_file_path):
    with open(save_file_path, 'rb') as f:
        raw_content = f.read()
    # 解析成你需要的BeautifulSoup对象
    return BeautifulSoup(raw_content, "html.parser")

# 加载后复用你的getValue函数
page = load_and_parse_html("saved_page.html")

def getValue(page):
    target_td = page.find('td', attrs={'class': 'Fz(s) Fw(500) Ta(end)'})
    return target_td.text if target_td else "未找到目标元素"

print(getValue(page))

方案2:序列化requests.Response与BeautifulSoup对象

如果需要完整保留请求响应的所有信息(比如状态码、响应头、Cookie等),可以用Python的pickle模块直接序列化对象。不过要注意:pickle文件的兼容性较差,不同Python版本或requests/bs4版本可能无法正常加载。

保存对象

import pickle
import requests
from bs4 import BeautifulSoup

def save_response_objects(link, response_pkl_path, soup_pkl_path):
    response = requests.get(link, timeout=5)
    response.raise_for_status()
    # 序列化保存Response对象
    with open(response_pkl_path, 'wb') as f:
        pickle.dump(response, f)
    # 解析后序列化保存BeautifulSoup对象
    soup = BeautifulSoup(response.content, "html.parser")
    with open(soup_pkl_path, 'wb') as f:
        pickle.dump(soup, f)

# 调用示例
save_response_objects("https://example.com", "response.pkl", "soup.pkl")

加载对象

import pickle

def load_response(pkl_path):
    with open(pkl_path, 'rb') as f:
        return pickle.load(f)

def load_soup(pkl_path):
    with open(pkl_path, 'rb') as f:
        return pickle.load(f)

# 加载后使用
loaded_response = load_response("response.pkl")
loaded_soup = load_soup("soup.pkl")

# 复用getValue函数
def getValue(page):
    target_td = page.find('td', attrs={'class': 'Fz(s) Fw(500) Ta(end)'})
    return target_td.text if target_td else "未找到目标元素"

print(getValue(loaded_soup))

额外小贴士

  • 建议给保存的文件加上时间戳(比如saved_page_20240520_1430.html),这样可以轻松区分不同时间的网页快照,避免覆盖。
  • 如果网站内容更新频繁,可以在加载前检查文件的创建时间,超过阈值就重新爬取更新。

内容的提问来源于stack exchange,提问作者שגיא שלום

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:17