如何通过wget模拟点击获取指定页面的降雨月统计文件?
使用wget模拟点击“Monat”按钮下载降雨月统计数据
我之前也碰到过这种情况——网页上的下载按钮不是直接指向静态URL,而是通过JavaScript触发请求。下面是一步步解决的实用方法:
1. 找出“Monat”按钮对应的真实下载链接
首先得搞清楚点击按钮后浏览器实际请求的是什么URL:
- 打开目标页面,按下F12调出浏览器开发者工具,切换到网络标签页
- 点击左上角的清空按钮,把现有请求都清空
- 现在点击页面上的“Monat”按钮,盯着网络请求列表,找新出现的请求(通常是
.xlsx或.xls后缀的文件) - 找到这个请求后,右键选择“复制链接地址”,这就是你要的真实下载URL
2. 直接用wget下载
如果这个URL是静态的(不会随时间变化),直接运行下面的命令就行:
wget "你复制的完整下载URL"
3. 处理网站的反爬验证(如果需要)
有些网站会检查请求的来源(Referer)或者浏览器标识(User-Agent),如果直接用wget下载失败,试试加上这些参数:
# 带上原页面作为Referer,模拟从页面点击过来的请求 wget --referer="http://www.noel.gv.at/wasserstand/static/stations/109710/station.html" "下载URL" # 如果还不行,加上浏览器的User-Agent,伪装成普通浏览器请求 wget --referer="http://www.noel.gv.at/wasserstand/static/stations/109710/station.html" \ --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" \ "下载URL"
4. 应对动态生成的URL
如果下载URL里有动态参数(比如时间戳、随机字符串),那得看看页面的JavaScript代码:
- 在开发者工具的源代码标签页里,搜索“Monat”或者“excel”关键词,找到触发下载的JS函数
- 分析函数逻辑,看它是怎么拼接下载URL的(比如是否基于站点ID生成),然后自己构造出对应的URL再用wget下载
举个例子,如果找到的JS代码是这样的:
function downloadMonthly() { const stationId = '109710'; window.location.href = `/wasserstand/static/stations/${stationId}/monthly_rainfall.xlsx`; }
那对应的完整下载URL就是http://www.noel.gv.at/wasserstand/static/stations/109710/monthly_rainfall.xlsx,直接用wget下载就行。
内容的提问来源于stack exchange,提问作者gfuellerer
相关产品推荐
相关产品推荐

