• 用脚本实现对pm2.5 数据的获取


    最近看到一个网站可以提供pm2.5数据,但跟sina一样需要appkey。

    如果你跟我一样怕麻烦,那么这篇文章是为你写的。

    基本的思路是先获取网页,从网页中解析出有意义的字段。从页面(如北京)上看,

    这个网站比较干净,可以通过比较简单的方法获取。

    1. 通过wget获取网页(页面是utf-8编码,无须转码),保存为pm25.htm.

    2. 抽取有意义的字段,这个通过分析页面结构可以获得,我这边一句话就搞定了。

    sed -n '/<tr>/,/<\/tr>/p' pm25.html 

    得到

    View Code
    <tr>
              <th>监测点</th>
              <th>AQI<br>空气质量指数</th>
              <th>PM2.5<br>细颗粒物</th>
              <th>PM10<br>可吸入颗粒物</th>
              <th>CO<br>一氧化碳</th>
              <th>NO2<br>二氧化氮</th>
              <th>O3<br>臭氧1小时平均</th>
              <th class="O3_8h_dn">O3<br>臭氧8小时平均</th>
              <th>SO2<br>二氧化硫</th>
              <th>空气质量<br>指数类别</th>
            </tr>
                <tr>
                  <td>万寿西宫</td>
                  <td>85</td>
                  <td>14</td>
                  <td>26</td>
                  <td>0.4</td>
                  <td>73</td>
                  <td>2</td>
                  <td class="O3_8h_dn">34</td>
                  <td>3</td>
                  <td></td>
                </tr>
                <tr>
                  <td>定陵</td>
                  <td>77</td>
                  <td>11</td>
                  <td>_</td>
                  <td>0.3</td>
                  <td>9</td>
                  <td>95</td>
                  <td class="O3_8h_dn">98</td>
                  <td>4</td>
                  <td></td>
                </tr>
                <tr>
                  <td>东四</td>
                  <td>83</td>
                  <td>3</td>
                  <td>6</td>
                  <td>0.4</td>
                  <td>30</td>
                  <td>88</td>
                  <td class="O3_8h_dn">54</td>
                  <td>4</td>
                  <td></td>
                </tr>
                <tr>
                  <td>天坛</td>
                  <td>83</td>
                  <td>16</td>
                  <td>36</td>
                  <td>0.4</td>
                  <td>57</td>
                  <td>4</td>
                  <td class="O3_8h_dn">19</td>
                  <td>3</td>
                  <td></td>
                </tr>
                <tr>
                  <td>农展馆</td>
                  <td>78</td>
                  <td>3</td>
                  <td>13</td>
                  <td>0.3</td>
                  <td>46</td>
                  <td>60</td>
                  <td class="O3_8h_dn">39</td>
                  <td>3</td>
                  <td></td>
                </tr>
                <tr>
                  <td>官园</td>
                  <td>75</td>
                  <td>10</td>
                  <td>14</td>
                  <td>0.2</td>
                  <td>32</td>
                  <td>82</td>
                  <td class="O3_8h_dn">44</td>
                  <td>4</td>
                  <td></td>
                </tr>
                <tr>
                  <td>海淀区万柳</td>
                  <td>78</td>
                  <td>12</td>
                  <td>39</td>
                  <td>0.3</td>
                  <td>_</td>
                  <td>_</td>
                  <td class="O3_8h_dn">45</td>
                  <td>10</td>
                  <td></td>
                </tr>
                <tr>
                  <td>顺义新城</td>
                  <td>88</td>
                  <td>12</td>
                  <td>22</td>
                  <td>0.4</td>
                  <td>69</td>
                  <td>24</td>
                  <td class="O3_8h_dn">66</td>
                  <td>3</td>
                  <td></td>
                </tr>
                <tr>
                  <td>怀柔镇</td>
                  <td>87</td>
                  <td>8</td>
                  <td>17</td>
                  <td>0.2</td>
                  <td>1</td>
                  <td>114</td>
                  <td class="O3_8h_dn">89</td>
                  <td>3</td>
                  <td></td>
                </tr>
                <tr>
                  <td>昌平镇</td>
                  <td>87</td>
                  <td>10</td>
                  <td>17</td>
                  <td>0.3</td>
                  <td>31</td>
                  <td>75</td>
                  <td class="O3_8h_dn">83</td>
                  <td>3</td>
                  <td></td>
                </tr>
                <tr>
                  <td>奥体中心</td>
                  <td>77</td>
                  <td>15</td>
                  <td>23</td>
                  <td>0.3</td>
                  <td>43</td>
                  <td>60</td>
                  <td class="O3_8h_dn">55</td>
                  <td>7</td>
                  <td></td>
                </tr>
                <tr>
                  <td>古城</td>
                  <td>79</td>
                  <td>8</td>
                  <td>26</td>
                  <td>0.2</td>
                  <td>7</td>
                  <td>107</td>
                  <td class="O3_8h_dn">93</td>
                  <td>3</td>
                  <td></td>
                </tr>

    这样就是一个表格了,如果需要发送邮件,只需要在这段文本前后加个<html><table>的头和尾即可。

    如果需要实现对标签的过滤,也是可以用脚本命令实现的(假设之前保存的文件为table.html)。

    具体如下

    awk -F'[<>]' '{if($0~/<\/tr>/) printf("\n"); if($0~/<t[d|h]>/)printf("%s\t",$3);}' table.html


    结论

    1:脚本是个非常方便的工具。

    2:脚本中正则是个必备的工具。

    3:学习永无止境。

  • 相关阅读:
    MyEclipse里运行时报错
    Django中Template does not exit
    Django简单界面开发
    Django安装过程
    搭建NFS服务器和客户端过程中遇到的问题
    URL传值中文乱码的解决
    结合《需求征集系统》谈MVC框架
    对于微信小程序登录的理解图
    FpSpread基本句法
    sql,lambda,linq语句
  • 原文地址:https://www.cnblogs.com/westfly/p/3050544.html
Copyright © 2020-2023  润新知