如何用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 _
相关产品推荐
相关产品推荐

