Python GET请求中如何循环遍历payload参数发起批量请求
实现方案
原代码问题
你当前直接将整个邮编列表传入payload的address字段,requests发起请求时会把整个列表作为参数值提交,不会自动为每个邮编生成独立请求,无法实现逐个邮编查询的效果。
核心修改思路
遍历邮编列表,每次发起请求时仅将当前遍历到的单个邮编赋值给address参数,其余固定参数复用即可,同时建议补充异常捕获、请求间隔逻辑,避免请求失败或触发站点反爬机制。
修改后可运行代码
import requests import time # 替换为你实际的目标接口地址 url = "YOUR_TARGET_URL" # 替换为你实际抓包得到的请求头信息 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } zip_codes = ['00001', '10000', '20000', '30000', '40000', '50000', '60000', '70000', '80000', '90000'] # 固定公共参数,不需要每次重复定义 base_params = { 'radius': 250, 'pagesize': 40, 'page': 1, } result_list = [] for zip_code in zip_codes: # 复制公共参数,替换当前邮编 current_params = base_params.copy() current_params['address'] = zip_code try: resp = requests.get( url=url, params=current_params, headers=headers, timeout=15 ) # 状态码非200时直接抛出异常 resp.raise_for_status() # 如果返回是HTML页面,把resp.json()换成resp.text即可 page_data = resp.json() result_list.append({ "zip_code": zip_code, "data": page_data }) print(f"邮编 {zip_code} 数据拉取成功") except Exception as e: print(f"邮编 {zip_code} 请求失败,错误:{str(e)}") # 请求间隔1秒,避免频率过高被拦截,可根据站点规则调整 time.sleep(1) # 后续可直接对result_list做解析、存储操作
注意事项
- 代码中
url和headers需要替换为你自己抓包获取的真实值,否则无法正常发起请求 - 如果目标站点反爬限制较严,可适当调大
time.sleep()的间隔数值 - 涉及分页场景时,可以在单个邮编的请求逻辑内再加一层循环,递增
page参数直到拉取完该邮编下的所有数据 - 如果需要提升批量请求效率,可在控制并发数的前提下使用异步请求库(如aiohttp),但不建议一开始就开过高并发,容易被封IP
内容的提问来源于stack exchange,提问作者Zane Cantrell
相关产品推荐
相关产品推荐

