如何在Python中正确使用URL列表(.txt)实现站点可用性检测
批量检测站点可用性的Python脚本修复方案
你的代码无法正常运行主要有几个问题,直接给你修正后的代码,再逐一说明问题点:
修正后的代码
import requests # 用with语句自动管理文件资源,避免泄漏 with open('G:\\urls_list.txt', 'r', encoding='utf-8') as urls_list: for url in urls_list: # 去除url前后的空白字符(包括换行符) cleaned_url = url.strip() # 跳过空行 if not cleaned_url: continue try: # 设置超时,避免长时间卡住 response = requests.get(cleaned_url, timeout=10) # 检查状态码,2xx都算正常 if response.status_code >= 200 and response.status_code < 300: print(f'{cleaned_url} - 正常') else: print(f'{cleaned_url} - 不可用,状态码:{response.status_code}') except requests.exceptions.RequestException as e: # 捕获所有请求异常,比如连接超时、域名无效等 print(f'{cleaned_url} - 请求失败:{str(e)}')
原代码的问题说明
- 文件资源未正确管理:直接用
open()打开文件后没手动关闭,用with语句会在代码块结束后自动关闭文件,避免资源泄漏。 - URL未清理:从文本文件读取的每一行末尾会带有换行符
\n,直接传给requests.get会导致请求错误,必须用strip()去除空白字符。 - 未处理请求异常:如果站点无法连接、超时或域名不存在,
requests.get会抛出异常导致脚本崩溃,需要用try-except捕获所有请求相关异常。 - 格式化字符串错误:原代码
'Not active'.format(url)没有占位符,应该把{}放在字符串里才能替换变量。 - 状态码判断不全面:仅判断
!=200不够,200-299之间的状态码都表示请求成功。 - 无超时设置:如果某个站点长时间无响应,脚本会一直卡住,添加
timeout参数限制请求时间。
内容的提问来源于stack exchange,提问作者EvgeniyMEV
相关产品推荐
相关产品推荐

