如何修复Python数据解析器?需请求指定范围的API页面
修复后的代码及问题说明
问题点分析
- URL拼接错误:你把字符串
'i'直接写进URL里,导致请求固定地址https://example.com/api/v1/operators/dialogs/i,没有替换成循环变量i的数值。 - 循环范围不符合需求:设置的
range(1500000)会从0循环到1499999,但实际需要的是1到999。 - 会话重复创建:每次循环新建
httpx.Client(),效率低下,不符合最佳实践,应该在循环外创建一次会话复用连接。
修复后的代码
import httpx import time from loguru import logger def parser(): # 循环外创建会话,复用连接 with httpx.Client() as session: # 循环范围改为1到1000(range左闭右开,所以写1000覆盖到999) for i in range(1, 1000): logger.info(f"page number {i}") # 用f-string将变量i插入URL response = session.get(f'https://example.com/api/v1/operators/dialogs/{i}') # 先判断请求是否成功,避免写入无效内容 if response.status_code == 200: with open('result.txt', 'a', encoding='utf8') as f: f.write(f"{response.text}\n") logger.debug(f"Reply from the server {response.text}") logger.success(f"page {i} written to txt") else: logger.error(f"page {i} request failed, status code: {response.status_code}") # 添加请求间隔,避免给服务器造成过大压力 time.sleep(0.5) parser()
额外优化说明
- 增加请求状态码校验,仅当请求成功(200状态码)时才写入文件,避免错误内容污染结果。
- 加入
time.sleep(0.5)控制请求频率,防止触发服务器反爬机制或导致服务过载。 - 使用
with语句管理httpx.Client(),自动处理会话关闭,更安全可靠。
内容的提问来源于stack exchange,提问作者voskoboj
相关产品推荐
相关产品推荐

