You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:57:05