代码之家  ›  专栏  ›  技术社区  ›  ClimateUnboxed

从使用php的网页定期下载csv文件的脚本

php
  •  0
  • ClimateUnboxed  · 技术社区  · 7 年前

    我不确定这是否可能,但我想编写一个脚本(可以是bash、python等),可以从使用PHP的网页自动下载csv文件(我对此一无所知)。该网页是一个区域气象服务: http://www.meteo.fvg.it/archivio.php?ln=&p=dati 通常我是通过手动点击下拉栏中的一个站点,点击“每日”,点击“可视化数据”,最后点击“下载CSV”来获取CSV文件的。。。

    2 回复  |  直到 7 年前
        1
  •  1
  •   marcus    7 年前

    此网站向 http://www.meteo.fvg.it/ajax/getStationData.php 使用以下表单域:

    a: 2018
    m: 8
    g: 4
    s: CMT@Camino@syn@45.920300@12.938600@30
    t: H_2
    ln: 
    o: visualizza
    

    并返回一个html页面,其中可下载的CSV数据被奇怪地直接编码到下载按钮的href属性中:

    <a href=\"data:application\/csv;charset=utf-8,giorno%3Bora%20UTC%2A%3BPioggia%20mm%3BTemp.%20gradi%20C%3BUmidita%27%20%25%3BVento%20med%20km%2...">
    

    因此,为了以编程方式解决这个问题,您必须查看Chrome开发工具中的network选项卡,熟悉随ajax请求一起发送的字段及其参数。 然后使用curl获取结果,如下所示(只是从network选项卡中复制出来) Info

    curl 'http://www.meteo.fvg.it/ajax/getStationData.php' -H 'Cookie: PHPSESSID=olng2rqoia3qsecangkh3bg4r4' -H 'Origin: http://www.meteo.fvg.it' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.9,de;q=0.8' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.23 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Referer: http://www.meteo.fvg.it/archivio.php?ln=&p=dati' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'DNT: 1' --data 'a=2018&m=8&g=4&s=CMT%40Camino%40syn%4045.920300%4012.938600%4030&t=H_2&ln=&o=visualizza' --compressed
    

    然后用dom解析器解析结果,获取下载按钮的内容

    然后url解码并保存。

    您可以使用php、python、node.js来实现这一点,这是您最熟悉的。

    也许,如果你再多窥探一下,你会发现一个静态的url,直接给出结果。

        2
  •  0
  •   SirPilan    7 年前

    查看文件的下载位置(如浏览器中的网络控制台)或下载源。然后使用 file_get_contents 在php中下载。

    如果文件名更改,请尝试找出模式。也许只是个约会。

    推荐文章