如何将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
相关产品推荐
相关产品推荐

