已实现URL请求,如何移除文本文件中4xx/5xx状态码的URL?
移除无效URL(4xx/5xx状态码)的解决方案
你已经搞定了URL请求的核心部分,剩下的过滤无效URL和保存结果其实很简单,我帮你调整并完善了代码,直接就能用:
完整代码实现
import requests # 读取文件中的URL,自动处理换行符和空行 with open("test.txt", "r") as file_inp: # 用列表推导式读取并清洗URL:去掉换行、过滤空行 url_list = [line.strip() for line in file_inp if line.strip()] # 用来存储有效的URL valid_urls = [] for url in url_list: try: # 发起请求,设置超时防止程序卡住 response = requests.get(url, timeout=10) # 判断状态码:2xx(成功)和3xx(重定向)都算有效URL if 200 <= response.status_code < 400: valid_urls.append(url) else: print(f"移除无效URL:{url} | 状态码:{response.status_code}") except requests.exceptions.RequestException as e: # 处理请求异常(比如连不上、超时、URL格式错),这类也直接移除 print(f"URL请求失败:{url} | 错误信息:{str(e)} | 已移除") # 把有效URL写入新文件(建议先写新文件,确认没问题再替换原文件) with open("valid_urls.txt", "w") as file_out: for valid_url in valid_urls: file_out.write(f"{valid_url}\n") print(f"处理完成!共保留 {len(valid_urls)} 个有效URL,已保存到 valid_urls.txt")
几个关键细节说明
- 安全的文件操作:用
with语句打开文件,会自动帮你关闭文件,避免忘记关闭导致的资源泄漏 - URL清洗:读取时用
strip()去掉每行的换行符和空白字符,不然可能会因为URL带换行符导致请求失败 - 异常兜底:加入
try-except捕获请求过程中的各种异常(比如网络断了、URL格式不对),这些情况的URL也属于无效,直接过滤 - 灵活的状态码判断:这里把200-399都视为有效(包含重定向),如果你只想要完全成功的2xx状态码,可以把判断条件改成
response.status_code // 100 == 2 - 安全的结果保存:默认写入新文件
valid_urls.txt,避免直接覆盖原文件导致数据丢失,确认结果没问题后再替换原文件即可
内容的提问来源于stack exchange,提问作者captainfreaked
相关产品推荐
相关产品推荐

