天气资料有ogimet网页,相信这些资料是免费的。网页提供一个索取地面观测资料的脚本,内容如下
curl "http://www.ogimet.com/cgi-bin/getsynop?block=123&begin=200912010000&end=200912040000" -o "your_desired_file_name"
我可以在我所在的地区使用这些数据。除此之外,我还想访问高空观测数据。没有提供访问这些数据的脚本。可以通过以下链接手动访问,例如在一个站点上
https://www.ogimet.com/display_sond.php?lang=en&lugar=63741&tipo=ALL&ord=DIR&nil=SI&fmt=html&ano=2021&mes=09&day=02&hora=19&anof=2021&mesf=09&dayf=03&horaf=19&send=send
这给了我文本内容在截图
figure附件.我想知道是否有可能复制的文本,一旦我到达这个页面,使用,例如.一个Perl脚本.不幸的是,我没有任何最低工作的例子,我可以尝试.
3条答案
按热度按时间y0u0uwnf1#
是的,你可以像这样从网页上收集(“刮”)数据。
通常情况下,您会使用LWP::UserAgent或Mojo::UserAgent等工具获取页面--从Web服务器检索带有该网页HTML的字符串,然后使用Mojo::DOM或HTML::TreeBuilder等库解析HTML以提取感兴趣的数据
这里有很多关于使用这些工具(以及其他工具)的帖子。这里是一个在Perl.com article中使用
Mojo::DOM
的圆形示例。如果网页使用JavaScript来显示你感兴趣的数据,那就另当别论了。这意味着从服务器下载到浏览器的HTML也包含JavaScript代码--程序--可以直接在浏览器中运行。当你点击(或悬停等)页面元素时,它们就会被触发,重写页面,而不必返回服务器。
这是一个非常(过度)简化的解释,但关键是库需要理解JavaScript,以便将最后一个页面交给你解析,否则你只能得到最后一个来自服务器的HTML,以及尚未运行的JS代码。但上面链接的主要库不知道任何JavaScript;它们只是通过HTTP到达服务器,并将服务器返回的内容交给你。
对于一个了解JavaScript的工具,我推荐
Selenium
,用于测试网页,但也非常适合这项工作,它本身是用JavaScript编写的。在Perl中使用它的一种方法是使用Selenium::Chrome(或::Firefox
)和Selenium::Remote::Driver。cwxwcias2#
下面是一个使用
Mojo::DOM
的例子:输出:
tjvv9vkg3#
如果
Mojo::DOM
模块不可用,则可以通过这种方式提取数据。Perl脚本使用hash
%params
表示OP问题中指定的位置和日期。通过添加模块Getops::Long
,每个参数都可以在命令行上单独调整。注意:脚本接受一个参数 * 站id*
输出