如何使用Requests抓取URL带日期参数的多页面数据?
按日期参数批量抓取页面数据实现方案
实现思路
- 先基于
datetime模块生成从2019-01-01到当前日期的所有符合YYYY-MM-DD格式的日期字符串 - 循环将日期作为参数拼接到目标URL中,用
requests发起请求 - 增加异常捕获、请求延时逻辑,避免触发网站反爬机制
- 按需保存响应的文本/JSON/HTML内容即可
依赖安装
首先安装需要的第三方库:
pip install requests
完整可运行代码
import requests from datetime import datetime, timedelta import time import os # 配置项 BASE_URL = "http://www.example.com/getpublicreport" START_DATE = "2019-01-01" # 请求头伪装成浏览器,避免被拦截 HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 请求间隔(秒),根据网站反爬强度调整,避免访问过快被封 REQUEST_DELAY = 1 # 数据保存目录 SAVE_DIR = "./public_report_data" os.makedirs(SAVE_DIR, exist_ok=True) def generate_date_range(start_date_str: str) -> list[str]: """生成从指定开始日期到当前日期的所有日期字符串列表""" start_date = datetime.strptime(start_date_str, "%Y-%m-%d") end_date = datetime.now() date_list = [] current_date = start_date while current_date <= end_date: date_list.append(current_date.strftime("%Y-%m-%d")) current_date += timedelta(days=1) return date_list def fetch_single_day_report(date_str: str) -> str | None: """抓取单天的报告数据""" params = {"date": date_str} try: resp = requests.get(BASE_URL, params=params, headers=HEADERS, timeout=10) # 响应状态码正常才返回内容 resp.raise_for_status() return resp.text except Exception as e: print(f"抓取日期{date_str}失败:{str(e)}") return None if __name__ == "__main__": all_dates = generate_date_range(START_DATE) total_count = len(all_dates) print(f"共需要抓取{total_count}天的数据") for index, date in enumerate(all_dates, 1): print(f"正在抓取第{index}/{total_count}天,日期:{date}") content = fetch_single_day_report(date) if content: # 按日期命名保存文件,可根据需求修改为保存到数据库等 save_path = os.path.join(SAVE_DIR, f"{date}.html") with open(save_path, "w", encoding="utf-8") as f: f.write(content) # 每次请求后延时 time.sleep(REQUEST_DELAY) print("全部抓取任务完成")
自定义调整提示
- 如果网站返回的是JSON格式数据,可将
resp.text替换为resp.json(),保存时用json模块转存即可 - 如果网站有登录校验,可在
HEADERS中补充Cookie参数 - 可根据网站实际反爬规则调整
REQUEST_DELAY的数值,或者增加代理IP配置 - 如果遇到日期不存在的情况,可在异常捕获中增加跳过逻辑,避免重复重试
内容的提问来源于stack exchange,提问作者Rohith V
相关产品推荐
相关产品推荐

