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

如何将Python爬虫函数的输出结果正确存储到本地文件

爬取结果写入文件失效修复方案

原有代码问题

当前代码写入逻辑不生效的核心原因如下:

  • 递归逻辑有缺陷:捕获到元素不存在的AttributeError时,递归调用get_price()之后直接执行break退出当前层函数,递归层的执行结果不会同步到外层,很容易出现执行流提前终止、写入操作没有实际落地的情况
  • 文件路径不明确:直接用文件名Textfile.txt打开时,文件会被写入到程序运行时的工作目录,如果你运行脚本的路径和你预期查找文件的路径不一致,就会误以为写入没有成功
  • 文件操作缺少异常捕获:如果遇到文件夹不存在、路径无写入权限、内容编码不兼容的问题,程序会直接报错退出,看不到具体报错原因,只会觉得写入没生效
  • 资源释放逻辑不可靠:手动调用f.close()的写法,如果f.write()执行时抛出异常,后面的close不会执行,会导致文件句柄泄漏,写入内容可能残存在缓冲区不会落盘
  • 存在无意义逻辑:写的while True循环第一次执行不管成功还是失败都会break,循环完全没有实际作用

修正后代码

import requests
from bs4 import BeautifulSoup

# 替换为实际的目标URL和请求头
url = "目标商品页面URL"
HEADERS = {
    # 你的请求头配置
}
# 替换为你要存储的指定路径,比如Windows示例:r"D:\crawl_result\product.txt"
# Mac/Linux示例:"/home/yourname/crawl/product.txt"
SAVE_FILE_PATH = "Textfile.txt"

def get_price(max_retry=3):
    for i in range(max_retry):
        try:
            resp = requests.get(url, headers=HEADERS, timeout=15)
            resp.raise_for_status()
            soup = BeautifulSoup(resp.content, "lxml")
            product_title = soup.find("span", {"id": "productTitle"}).text.strip()
            
            # 用with上下文管理器自动处理文件打开关闭,无需手动调用close
            with open(SAVE_FILE_PATH, "w", encoding="utf-8") as f:
                f.write(product_title)
            print(f"写入完成,商品标题:{product_title}")
            print(f"文件存储位置:{SAVE_FILE_PATH}")
            return product_title
        except AttributeError:
            print(f"第{i+1}次解析页面未找到目标元素,准备重试")
            continue
        except Exception as e:
            print(f"执行出错:{str(e)}")
            continue
    print(f"累计重试{max_retry}次未成功,请检查请求配置或页面结构")
    return None

if __name__ == "__main__":
    get_price()

使用说明

  • 要将结果存到指定位置直接修改SAVE_FILE_PATH为目标路径的绝对地址即可,注意提前创建好路径对应的上级文件夹,否则会报路径不存在的错误
  • 打开文件时指定encoding="utf-8",避免标题带中文、特殊符号时出现乱码
  • 给请求增加超时和状态码校验,避免请求失败时后续解析无意义报错
  • 把原有的递归逻辑换成固定次数的重试逻辑,避免递归深度过高导致栈溢出

内容的提问来源于stack exchange,提问作者pathfinder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:48:28