发布于 

Linux开发环境及应用作业1

作业要求

从因特网上搜索相关Web网页,处理网页html数据,从中提取出当前时间点北京各监测站的 PM2.5浓度,输出格式如下。要求:写出各个处 理步骤,并给出解释。
2018-03-15 13:00:00,海淀区万柳,73
2018-03-15 13:00:00,昌平镇,67
2018-03-15 13:00:00,奥体中心,66
2018-03-15 14:00:00,海淀区万柳,73
2018-03-15 14:00:00,昌平镇,73
2018-03-15 14:00:00,奥体中心,75

实验过程

数据搜集

北京各监测站的PM2.5指数的数据来源网站:http://www.86pm25.com/city/beijing.html

数据整理及汇总

先展示实现该操作的指令和最后的结果:


下面详细解释指令:

  1. 首先利用标签把数据分成单独的行,sed -e 's/<tr/\n<tr/g'
  2. 其次删掉html文件中的所有标签-e 's/<[^<>]*>/ /g,把所有标签都换成了空格。
  3. 我先在html文件中寻找日期和时间,发现时间的那一行有“更新”的字样,于是建立awk文件,此时发现“更新”后面中文的冒号紧跟着日期,没发把日期分离开,于是先在中文冒号后面添加空格。顺便把日期和时间的格式改成标准的输出的格式。-e 's/:/: /g' -e 's/[年月]/-/g' -e 's/日//g -e 's/时/:00:00/g'
  4. 此时可以把时间和日期抽离出来了。在建立的awk文件中输入/更新/ {data = $2; time = $3}
  5. 得到日期和时间 之后,我们去找监测站和pm2.5指数,发现在这些数据最后都有$m^3$单位在,于是在awk文件中添加/m3/{printf("%s %s,%s,%s\n",date, time, $1, $3);}
  6. 最后把单位删掉,并输出到csv文件中即可。awk -f flow.awk | sed -e 's/[ug/m3]//g' > flow.csv