溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

空氣質(zhì)量數(shù)據(jù)網(wǎng)頁(yè)爬蟲(chóng)加數(shù)據(jù)處理

發(fā)布時(shí)間:2020-03-02 19:22:31 來(lái)源:網(wǎng)絡(luò) 閱讀:318 作者:13157330443 欄目:大數(shù)據(jù)

Python這門(mén)語(yǔ)言因其簡(jiǎn)單強(qiáng)大已經(jīng)火了很久了,但我接觸的比較晚,前幾個(gè)月因?yàn)橐黄┛烷_(kāi)始初步了解這門(mén)語(yǔ)言,并且之后模仿某位北郵的前輩的微博寫(xiě)了一個(gè)新浪微博的爬蟲(chóng)


這里給出鏈接:python編寫(xiě)的新浪微博爬蟲(chóng)


當(dāng)時(shí)為了能夠順便把從微博上抓下來(lái)的數(shù)據(jù)存儲(chǔ)起來(lái),順便裝了MySQL,之所以用MySQL,主要是因?yàn)镻ython支持MySQL的插件比較好找,比SQLserver好找一些,不過(guò)本人對(duì)數(shù)據(jù)庫(kù)了解比較少,順便學(xué)習(xí)了一些數(shù)據(jù)庫(kù)方面的簡(jiǎn)單操作。


寫(xiě)好之后運(yùn)行起來(lái)發(fā)現(xiàn)有些問(wèn)題,主要是新浪微博的服務(wù)器對(duì)訪(fǎng)問(wèn)次數(shù)和訪(fǎng)問(wèn)頻率有限制,以至于我下載了一些數(shù)據(jù)后,服務(wù)器會(huì)自動(dòng)屏蔽不再傳數(shù)據(jù)給我,當(dāng)時(shí)挺困惑,網(wǎng)上有人說(shuō)讓程序睡一段時(shí)間再繼續(xù)抓數(shù)據(jù),當(dāng)時(shí)也請(qǐng)教了北郵的前輩,也沒(méi)給我一個(gè)明確的答復(fù),也或許是自己寫(xiě)的問(wèn)題,所以讀到這里的朋友也可以提想法哈。或者到我微薄上留言:http://weibo.com/u/1820299335


---------------------------------------------------------分割線(xiàn)-----------------------------------------------


最近看國(guó)內(nèi)天氣質(zhì)量堪憂(yōu),所以心血來(lái)潮想要再寫(xiě)個(gè)程序把空氣質(zhì)量數(shù)據(jù)爬下來(lái)分析一下,于是開(kāi)始動(dòng)手,由于之前寫(xiě)新浪微博爬蟲(chóng)的經(jīng)驗(yàn),這次比較快,因?yàn)椴幌裥吕宋⒉┬枰M用戶(hù)登錄,中華人民共和國(guó)環(huán)境保護(hù)部--數(shù)據(jù)中心 的網(wǎng)頁(yè)比起微博還算簡(jiǎn)單,所以很快代碼就寫(xiě)好了,期間由于正則表達(dá)式運(yùn)用不熟練,在抓取城市名稱(chēng)和污染指數(shù)時(shí)遇到點(diǎn)小麻煩,網(wǎng)頁(yè)的html代碼如下:


<td οnmοuseοver="report1664549over()" class="report1_4" ><a >北京市</a></td>

<td class="report1_10" >2014-08-08 20:00</td>

<td class="report1_10" >85</td>

<td class="report1_10" >良</td>

<td οnmοuseοver="report1664549over()" class="report1_10" >PM2.5</td>


是表格形式的,關(guān)鍵項(xiàng)的前后正則表達(dá)式不太會(huì)寫(xiě),這里還望高手指點(diǎn),不過(guò)我找到了替代的方法,網(wǎng)頁(yè)下面還有一部分相關(guān)可以提取的html代碼:

<area shape="rect" coords="76,116,86,216" title="北京市 AQI指數(shù) 85">

<area shape="rect" coords="104,120,114,216" title="天津市 AQI指數(shù) 82">

<area shape="rect" coords="131,141,141,216" title="石家莊市 AQI指數(shù) 64">

<area shape="rect" coords="159,131,169,216" title="唐山市 AQI指數(shù) 72">

這個(gè)就方便提取多了,用python的正則表達(dá)式包可以一次性把所有的結(jié)果保存下來(lái),其實(shí)也就這么幾行代碼:

def getList(self,text):

? ? ? ? pat = re.compile('<area shape="rect" coords=".*" title="(.*) .+ ([0-9]+)">'.encode('utf-8'))

? ? ? ? try:

? ? ? ? ? ? cityList = pat.findall(text)

? ? ? ? except:

? ? ? ? ? ? cityList = None

? ? ? ? return cityList

其中加了異常處理,一面在長(zhǎng)時(shí)間運(yùn)行過(guò)程中,出現(xiàn)錯(cuò)誤程序異常終止。

第一次抓數(shù)據(jù)是從2014年1月抓到8月,(不知道為什么網(wǎng)站上沒(méi)有2014年以前的空氣質(zhì)量數(shù)據(jù),可能數(shù)據(jù)庫(kù)沒(méi)有開(kāi)通吧),抓取數(shù)據(jù)的時(shí)間間隔為12小時(shí),結(jié)果處理完生成GIF動(dòng)圖后發(fā)現(xiàn),時(shí)間間隔略長(zhǎng),畫(huà)面不連續(xù),于是重寫(xiě)抓取,這次采用的是2個(gè)小時(shí),一共運(yùn)行了10幾個(gè)小時(shí)把所有數(shù)據(jù)都下載下來(lái)了。


然后就是想辦法做數(shù)據(jù)可視化,以前沒(méi)用過(guò)地圖數(shù)據(jù)可視化的工具,但是Matlab用的比較熟,Matlab做這種數(shù)據(jù)處理和圖像處理都比較強(qiáng)大,所以就自己純手工來(lái)進(jìn)行數(shù)據(jù)可視化吧。


在網(wǎng)上截了個(gè)中國(guó)地圖當(dāng)背景,然后想辦法用Matlab往上畫(huà)數(shù)據(jù)。期間遇到點(diǎn)小麻煩,就是從網(wǎng)上找的城市坐標(biāo)是經(jīng)緯度表示的,需要映射到地圖圖像上相應(yīng)的位置,我直接選用最簡(jiǎn)單的線(xiàn)性映射方式進(jìn)行映射,結(jié)果發(fā)現(xiàn)在低緯度的城市映射結(jié)果還算準(zhǔn)確,但是高緯度的城市要差200多km,無(wú)語(yǔ)了,怎么會(huì)差這么多!查了下發(fā)現(xiàn),因?yàn)榈貓D是百度地圖截屏的,百度地圖用的是所謂的麥卡托投影法,也就是圓柱投影,虧自己以前在本科時(shí)研究過(guò)光纖陀螺測(cè)量地理維度,這個(gè)都沒(méi)注意到。修正之后城市的投影位置準(zhǔn)確多了。比如說(shuō)首都的位置:




把所有城市的空氣質(zhì)量用漸變色標(biāo)在地圖上,才發(fā)現(xiàn)自己美工差:




(顏色隨著空氣污染指數(shù)的變差按:綠(優(yōu))、黃(良)、橙(輕微污染)、紅(輕度污染)、紫(中度污染)、黑(重度污染)的順序變化)


一個(gè)一個(gè)的紅點(diǎn)像是生了皮膚病,還是用插值處理一下吧,還好Matlab在這方面功能比較強(qiáng)大,不用費(fèi)工夫:




好了很多,當(dāng)然上圖的效果也是經(jīng)過(guò)小小處理過(guò)的,總的來(lái)講畫(huà)面感同專(zhuān)業(yè)軟件比還有一定差距,但考慮到我是用Matlab畫(huà)出來(lái)的,這個(gè)畫(huà)質(zhì)我接受了,能夠說(shuō)明問(wèn)題就行。


然后我挑選了一些有特點(diǎn)的空氣污染比較嚴(yán)重的日子,制作生GIF動(dòng)圖,動(dòng)圖使用PhotoShop制作的。圖中著重關(guān)注紅紫色的霧霾在大氣中的移動(dòng)。



這個(gè)是14年1月2日14點(diǎn) 至14年1月4日18點(diǎn),這次嚴(yán)重霧霾天影響全國(guó),霧霾主要產(chǎn)生地主要有三個(gè),河北山東一帶,湖南湖北一帶,重慶四川一帶,總的看來(lái)是人口稠密,工業(yè)較多,而且也有地形因素在內(nèi)。




左:(2014-01-11-18至2014-01-13-08)右:(2014-01-19-14至2014-01-20-18),北方的霧霾天還是比較嚴(yán)重的,并且冬季多北風(fēng),霧霾向南方或東南方向擴(kuò)散,當(dāng)時(shí)南方的很多霧霾天也就這么產(chǎn)生了。。。





(2014-03-17-06至2014-03-19-06)其實(shí)北京地區(qū)的污染源也并不完全是北京河北,比如這個(gè)就說(shuō)明污染來(lái)自春季的蒙古大草原,查詢(xún)當(dāng)天北京是北風(fēng)。。。




(2014-05-26-20 至2014-05-28-00)再如這張,也比較明顯,查詢(xún)當(dāng)天北京天氣是浮塵,也是北風(fēng)


總的來(lái)說(shuō),空氣質(zhì)量差是全國(guó)性的,污染源比較多,只不過(guò)有些地方地理因素?cái)U(kuò)散起來(lái)快一些,擴(kuò)散慢的話(huà),即便是山清水秀的貴州也難免有霧霾。過(guò)了4月份,全國(guó)性的霧霾天明顯有所減少。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI