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

基于Beautiful Soup的嵌套FOR循环爬虫写入异常如何修复?

Python爬虫URL内容与存储文件对应写入修复方案

问题根因

你对问题的判断正确,核心错误是两层嵌套循环的逻辑冗余:
外层循环遍历索引创建test{x}.txt文件时,每次创建完新文件后,内层循环都会把全部8个URL依次爬取写入当前打开的文件,最终每个文件都会写入所有URL的爬取结果,不符合单URL对应单文件的需求。同时原代码没有主动关闭文件句柄,还可能存在缓存写入异常的问题。

修复方案

直接用enumerate遍历URL列表,一层循环同时拿到索引和对应URL即可,推荐搭配with上下文管理器自动处理文件关闭,避免资源泄漏。
修复后代码如下:

import requests
from bs4 import BeautifulSoup
import sys

# 注意:你原代码重复定义了urls,手动定义列表和from websites import urls二选一保留即可
urls = ['https://calevip.org/incentive-project/northern-california',
        'https://www.slocleanair.org/community/grants/altfuel.php',
        'https://www.mcecleanenergy.org/ev-charging/',
        'https://www.peninsulacleanenergy.com/ev-charging-incentives/',
        'https://www.irs.gov/businesses/plug-in-electric-vehicle-credit-irc-30-and-irc-30d',
        'https://afdc.energy.gov/laws/12309',
        'https://cleanvehiclerebate.org/eng/fleet',
        'https://calevip.org/incentive-project/san-joaquin-valley']

def scrape():
    # 同时遍历索引和对应URL,一层循环完成所有操作
    for idx, url in enumerate(urls):
        page = requests.get(url, timeout=30)
        soup = BeautifulSoup(page.content, "html.parser") 
        results = soup.prettify().encode('cp1252', errors='ignore')
        # 用with上下文管理器自动处理文件打开、写入、关闭逻辑
        with open(f"test{idx}.txt", 'wb') as f:
            f.write(results)

if __name__ == "__main__":
    scrape()

额外优化提示

  • 写入bytes类型的结果时直接用wb模式打开文件,无需再转str后写入,可避免编码异常
  • 给requests.get添加timeout参数、自定义请求头,可避免请求超时或者被网站反爬拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:21:00