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

如何在Python爬虫中跳过不存在的HTML遍历文件?

问题解答

核心结论

完全可以用try-except实现需求,但得注意精准抓特定异常,别啥错误都跳过,不然出了别的问题你都不知道。另外原代码里还有几个小bug得先改了,不然逻辑跑不起来。

修正后的完整代码

import os
from bs4 import BeautifulSoup

c = 1
n = 100  # 这里填你要遍历的最大数字
path = "./output"  # 填你的根目录路径

while c <= n:
    path1 = os.path.join(path, f"Chapter {c}")
    # 先检查目录有没有,别重复创建报错
    if not os.path.exists(path1):
        os.mkdir(path1)
    
    # 原代码补零逻辑有问题:比如c=1000的时候,会先触发c>=10的分支,永远到不了c>=1000的情况,改一下顺序
    if c < 10:
        z = f'000{c}'
    elif c < 100:
        z = f'00{c}'
    elif c < 1000:
        z = f'0{c}'
    else:
        z = str(c)
    
    print(z)
    html_file = f"{z}.html"
    
    try:
        # 打开HTML文件的操作放try里,文件不存在直接触发异常
        with open(html_file, 'r', encoding='utf-8') as fp:
            contents = fp.read()
            soup = BeautifulSoup(contents, 'lxml')
            title = soup.find('h1')
            paragraphs = soup.find_all('p')
        
        # 只有成功读到HTML内容,才写txt文件
        chapter_file = os.path.join(path1, f"chapter{c}.txt")
        with open(chapter_file, 'w', encoding='utf-8') as f:
            # 先写标题(如果有的话)
            if title:
                f.write(title.get_text(strip=True) + '\n\n')
            # 再写所有段落内容,跳过空段落
            for p in paragraphs:
                text = p.get_text(strip=True)
                if text:
                    f.write(text + '\n\n')
    except FileNotFoundError:
        print(f"{html_file} 不存在,直接跳过")
        c += 1
        continue
    # 其他错误单独处理,比如文件读不了、解析出错,别直接跳过
    except Exception as e:
        print(f"处理 {html_file} 时出错了: {str(e)}")
        c += 1
        continue
    
    c += 1

关键细节说明

  • 别用裸except:专门抓FileNotFoundError就行,要是用裸的except,像权限不够、HTML解析出错这种问题也会被跳过,到时候排查问题头大。
  • 补零逻辑要改:原代码里elif c>=10会先匹配所有大于等于10的数,比如c=1000的时候也会走这个分支,永远到不了c>=1000的判断,得改成从小到大的区间判断。
  • 目录先检查再创建:不然重复运行代码的时候,创建已存在的目录会报错,加个判断就解决了。
  • 指定编码:打开文件时加encoding='utf-8',避免不同系统下乱码。
  • 写入逻辑放try里:要是HTML文件不存在,就别创建空的txt文件了,所以把写文件的代码也放try块里,只有成功读了HTML才执行。

关于你提的try-except写法

你的思路是对的,但有几个小问题要改:

  1. 要把打开HTML、爬取内容、写入文件这些操作全放try块里,不然只抓一部分没用。
  2. 语法是except不是exception,而且最好指定具体的异常类型。
  3. continue后面不用加冒号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:15:42