用脚本实现对pm2.5 数据的获取
最近看到一个网站可以提供pm2.5数据,但跟sina一样需要appkey。
如果你跟我一样怕麻烦,那么这篇文章是为你写的。
基本的思路是先获取网页,从网页中解析出有意义的字段。从页面(如北京)上看,
这个网站比较干净,可以通过比较简单的方法获取。
1. 通过wget获取网页(页面是utf-8编码,无须转码),保存为pm25.htm.
2. 抽取有意义的字段,这个通过分析页面结构可以获得,我这边一句话就搞定了。
sed -n \'/<tr>/,/<\/tr>/p\' pm25.html
得到
<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:学习永无止境。