如何使用Perl脚本抓取ogimet网页高空观测数据的文本内容
可以使用Perl脚本自动获取该页面的文本内容,以下是可直接运行的实现方案:
依赖安装
首先安装需要的第三方Perl模块,执行以下命令:
cpanm LWP::UserAgent HTML::Strip
如果需要直接提取页面中的表格结构化数据,可以额外安装HTML::TableExtract模块。
完整实现脚本
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::Strip; # 配置请求参数,可根据需求修改 my $site_id = '63741'; # 站点编号 my $start_year = '2021'; my $start_month = '09'; my $start_day = '02'; my $start_hour = '19'; my $end_year = '2021'; my $end_month = '09'; my $end_day = '03'; my $end_hour = '19'; my $output_file = 'sounding_data.txt'; # 输出文件路径 # 构造请求URL my $url = "https://www.ogimet.com/display_sond.php?lang=en&lugar=$site_id&tipo=ALL&ord=DIR&nil=SI&fmt=html&ano=$start_year&mes=$start_month&day=$start_day&hora=$start_hour&anof=$end_year&mesf=$end_month&dayf=$end_day&horaf=$end_hour&send=send"; # 初始化请求客户端 my $ua = LWP::UserAgent->new; $ua->timeout(30); # 模拟浏览器UA避免被网站拦截 $ua->agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'); # 发送请求 my $response = $ua->get($url); unless ($response->is_success) { die "请求失败: " . $response->status_line; } # 去除HTML标签,提取纯文本 my $hs = HTML::Strip->new(); my $raw_text = $hs->parse( $response->content ); $hs->eof; # 写入本地文件 open my $fh, '>:encoding(utf8)', $output_file or die "无法打开输出文件: $!"; print $fh $raw_text; close $fh; print "数据已成功保存到 $output_file\n";
优化建议
- 可以将请求URL中的
fmt=html参数改为fmt=csv,直接获取CSV格式的结构化数据,无需额外解析HTML标签,数据处理更方便 - 批量请求时建议添加10-30秒的间隔,避免请求频率过高触发网站的反爬限制
- 可以扩展脚本逻辑,批量遍历多个站点号、多个时间段,实现批量自动下载
内容的提问来源于stack exchange,提问作者Zilore Mumba
相关产品推荐
相关产品推荐

