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

如何用Python/PowerShell自动更新链接日期并手动调整天数?

解决方案

Python实现

核心逻辑

借助datetime模块处理日期格式,生成目标链接后复用你已有的BeautifulSoup下载逻辑即可。

1. 自动生成当前日期的链接

from datetime import datetime
import requests
from bs4 import BeautifulSoup

# 基础链接模板,预留日期占位符
base_url = "https://www.drishtiias.com/current-affairs-news-analysis-editorials/news-analysis/{date}"

# 获取当前日期,格式转为DD-MM-YYYY
current_date = datetime.now().strftime("%d-%m-%Y")
target_url = base_url.format(date=current_date)

# 复用你的下载逻辑(示例)
response = requests.get(target_url)
if response.status_code == 200:
    # 按日期命名保存HTML文件
    with open(f"{current_date}_news_analysis.html", "w", encoding="utf-8") as f:
        f.write(response.text)
    print(f"已成功下载{current_date}的页面")
else:
    print(f"请求失败,状态码:{response.status_code}")

2. 手动指定日期/日期范围

可以直接在代码中定义日期范围,或者通过命令行参数灵活传入:

from datetime import datetime, timedelta

# 生成指定范围内的日期列表
def generate_dates(start_date_str, end_date_str):
    start_date = datetime.strptime(start_date_str, "%d-%m-%Y")
    end_date = datetime.strptime(end_date_str, "%d-%m-%Y")
    date_list = []
    current = start_date
    while current <= end_date:
        date_list.append(current.strftime("%d-%m-%Y"))
        current += timedelta(days=1)
    return date_list

# 示例:手动指定2024-05-10至2024-05-16的日期
start_date = "10-05-2024"
end_date = "16-05-2024"
target_dates = generate_dates(start_date, end_date)

base_url = "https://www.drishtiias.com/current-affairs-news-analysis-editorials/news-analysis/{date}"

# 批量下载指定日期的页面
for date in target_dates:
    target_url = base_url.format(date=date)
    response = requests.get(target_url)
    if response.status_code == 200:
        with open(f"{date}_news_analysis.html", "w", encoding="utf-8") as f:
            f.write(response.text)
        print(f"已成功下载{date}的页面")
    else:
        print(f"{date}页面请求失败,状态码:{response.status_code}")

如果想更灵活,可改为命令行传参:

import sys
from datetime import datetime, timedelta

def generate_dates(start_date_str, end_date_str):
    # 同上日期生成函数
    pass

if __name__ == "__main__":
    if len(sys.argv) == 2:
        # 单个日期模式:python script.py 15-05-2024
        target_dates = [sys.argv[1]]
    elif len(sys.argv) == 3:
        # 日期范围模式:python script.py 10-05-2024 16-05-2024
        target_dates = generate_dates(sys.argv[1], sys.argv[2])
    else:
        print("使用方式:")
        print("  单个日期:python script.py 15-05-2024")
        print("  日期范围:python script.py 10-05-2024 16-05-2024")
        sys.exit(1)
    
    # 后续下载逻辑同前

PowerShell实现

核心逻辑

用Get-Date处理日期格式,通过Invoke-WebRequest发起请求并保存HTML文件。

1. 自动生成当前日期的链接

# 基础链接模板
$baseUrl = "https://www.drishtiias.com/current-affairs-news-analysis-editorials/news-analysis/{0}"
# 获取当前日期并格式化为DD-MM-YYYY
$currentDate = Get-Date -Format "dd-MM-yyyy"
$targetUrl = $baseUrl -f $currentDate

# 发起请求并保存文件
try {
    $response = Invoke-WebRequest -Uri $targetUrl -ErrorAction Stop
    $outputPath = "$currentDate`_news_analysis.html"
    $response.Content | Out-File -FilePath $outputPath -Encoding UTF8
    Write-Host "已成功下载$currentDate的页面"
} catch {
    Write-Host "请求失败:$_"
}

2. 手动指定日期/日期范围

# 生成指定日期范围的函数
function Get-DateRange {
    param(
        [string]$StartDate,
        [string]$EndDate
    )
    $start = [datetime]::ParseExact($StartDate, "dd-MM-yyyy", $null)
    $end = [datetime]::ParseExact($EndDate, "dd-MM-yyyy", $null)
    $dates = @()
    while ($start -le $end) {
        $dates += $start.ToString("dd-MM-yyyy")
        $start = $start.AddDays(1)
    }
    return $dates
}

# 示例:手动指定日期范围
$startDate = "10-05-2024"
$endDate = "16-05-2024"
$targetDates = Get-DateRange -StartDate $startDate -EndDate $endDate

$baseUrl = "https://www.drishtiias.com/current-affairs-news-analysis-editorials/news-analysis/{0}"

# 批量下载
foreach ($date in $targetDates) {
    $targetUrl = $baseUrl -f $date
    try {
        $response = Invoke-WebRequest -Uri $targetUrl -ErrorAction Stop
        $outputPath = "$date`_news_analysis.html"
        $response.Content | Out-File -FilePath $outputPath -Encoding UTF8
        Write-Host "已成功下载$date的页面"
    } catch {
        Write-Host "$date页面请求失败:$_"
    }
}

若仅需单个日期,直接替换$targetDates为单个字符串即可:

$targetDates = @("15-05-2024")

内容的提问来源于stack exchange,提问作者Alphage _

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:32:28