用脚本实现对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:学习永无止境。

原文地址:https://www.cnblogs.com/westfly/p/3050544.html