网页爬取循环URL生成独立文本文件时遇索引错误求助
问题解决:列表索引错误修复
错误根源
你的代码报错核心原因:
- 循环变量
i是urls中的URL字符串,而file_name是列表类型,列表仅支持整数或切片作为索引,用字符串索引必然触发list indices must be integers or slices, not str错误。 - 每次循环重复生成
file_name列表属于冗余操作,且如果urls的数量和range(37,151)的长度(114个)不匹配,后续还会出现索引越界问题。
修正后的代码
直接在循环中基于URL的遍历序号生成对应文件名,逻辑更简洁高效:
basename = "file_" # 用enumerate获取从37开始的序号,对应每个URL for idx, url in enumerate(urls, start=37): text = fetch_text(url) listToStr = ' '.join([str(elem) for elem in text]) result = re.sub(r'<.*?>', '', listToStr) # 生成当前URL对应的文件名 file_name = f"{basename}_{idx}.txt" with open(file_name, 'w') as f: f.write(result)
关键修改点
- 用
enumerate(urls, start=37)替代原循环:直接获取每个URL的遍历序号(从37开始),彻底避免用URL字符串做索引的问题。 - 将
basename移到循环外:避免重复定义,提升代码运行效率。 - 按需生成单个文件名:不再提前生成整个文件名列表,完全适配
urls的数量,不会出现索引不匹配问题。
内容的提问来源于stack exchange,提问作者Gopi Kishan
相关产品推荐
相关产品推荐

