林亦凡 劉孟雄(長(zhǎng)安大學(xué),陜西 西安 710054)
網(wǎng)絡(luò)爬蟲(chóng)是用戶獲取互聯(lián)網(wǎng)數(shù)據(jù)的有效工具,可以用于編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)的語(yǔ)言亦有多種,其中比較常用的語(yǔ)言有python,java,C++等。Python是一種面向?qū)ο蟮慕忉屝陀?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,可用于諸多方面,如:做Web前端與后端,設(shè)計(jì)軟件的GUI,大數(shù)據(jù)分析等等。
本軟件的編寫(xiě)環(huán)境與Python第三方庫(kù)見(jiàn)表1。Requests庫(kù)基于Python編寫(xiě),它比urllib更加方便,可以節(jié)約我們大量的工作,完全滿足HTTP測(cè)試需求[1]。BeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù)。PyQt5是QT專門為Python所寫(xiě)的第三方庫(kù),可以用于軟件GUI的編寫(xiě)。Pyinstaller可以將Python的“.py”文件封裝成可以在Windows電腦上運(yùn)行的“.exe”可執(zhí)行文件。
表1 軟件建立所需的工具及其版本
一般我們研究區(qū)域污染狀況成因時(shí),需要找出污染源的坐標(biāo),就宏觀研究而言,百度地圖是一個(gè)很好的選擇。經(jīng)過(guò)分析,百度地圖提供一個(gè)接口:http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=con&from=webmap&c=233&wd={}&pn={}。其中 wd 代表的是所需的查找內(nèi)容,pn用于翻頁(yè)。需要指出的是,如果訪問(wèn)過(guò)于快速,會(huì)出現(xiàn)訪問(wèn)不成功現(xiàn)象,這時(shí)需要放慢抓取速度與設(shè)置斷點(diǎn)續(xù)傳的功能[3]。抓取數(shù)據(jù)坐標(biāo)是百度墨卡托坐標(biāo),與經(jīng)緯度坐標(biāo)有很大出入,需要進(jìn)行坐標(biāo)轉(zhuǎn)換。
本軟件的空氣質(zhì)量數(shù)據(jù)來(lái)源于網(wǎng)站:http://www.pm25.in/。在抓取中由于PC端的網(wǎng)頁(yè)采取的Ajax所以學(xué)采用Selenium與Phantomjs抓取,但是會(huì)大量占用電腦內(nèi)存與CPU。故筆者將Headers設(shè)置成手機(jī)以便正常抓取。由于代碼較長(zhǎng)不在此放出。
可以運(yùn)用Python的標(biāo)準(zhǔn)庫(kù)matplotlib繪制空間的點(diǎn)密度,熱密度圖,及將上述地圖中收集的數(shù)據(jù)反應(yīng)的地圖中。本軟件只是應(yīng)用hexbin函數(shù)做了簡(jiǎn)單的繪制。由于需要將matplotlib嵌入PyQt5開(kāi)發(fā)的窗口內(nèi)代碼較長(zhǎng),不再給出。
運(yùn)用PyQt5進(jìn)行GUI設(shè)計(jì),將上述6個(gè)爬蟲(chóng)進(jìn)行封裝[2]。其中空氣質(zhì)量按鈕對(duì)應(yīng)空氣質(zhì)量數(shù)據(jù)收集(自動(dòng)每一小時(shí)收集一次)。其中,坐標(biāo)轉(zhuǎn)換按鈕為百度地圖收集的數(shù)據(jù)的坐標(biāo)轉(zhuǎn)換(需要key)。
為了簡(jiǎn)化界面,將界面中的菜單欄與狀態(tài)欄統(tǒng)統(tǒng)刪除,只留下6個(gè)爬蟲(chóng)的相關(guān)按鈕并盡可能放大,,如圖2。為了保證界面的美觀性,不再允許用戶將界面最大化,即固定主界面的大小。其中空氣質(zhì)量數(shù)據(jù),氣象數(shù)據(jù),百度地圖,高德地圖的二級(jí)界面基本一致,輸入爬取內(nèi)容與保存位置點(diǎn)擊開(kāi)始即可。
對(duì)于地圖繪制功能,是本軟件實(shí)現(xiàn)的難點(diǎn)內(nèi)容。需要將matplotlib畫(huà)布嵌到界面中,實(shí)現(xiàn)起來(lái)有些復(fù)雜[3]。該界面提供了西安市及其各個(gè)區(qū)的輪廓圖、點(diǎn)密度與熱密度圖的繪制。
圖2 軟件主界面
運(yùn)用Python編寫(xiě)爬蟲(chóng)軟件,以用于科研相關(guān)數(shù)據(jù)的抓取,可以更好的服務(wù)于科學(xué)研究。Python語(yǔ)言應(yīng)用廣泛,在統(tǒng)計(jì)分析方面也正在追趕R語(yǔ)言,在數(shù)學(xué)建模與數(shù)據(jù)分析方面亦正在追趕MATLIB,且其編寫(xiě)桌面程序的開(kāi)發(fā)效率較高,可以較快的實(shí)現(xiàn)某些功能。
[1]狄博,王曉丹.基于Python語(yǔ)言的面向?qū)ο蟪绦蛟O(shè)計(jì)課程教學(xué)[J].計(jì)算機(jī)工程與科學(xué),2014,36(S1):122-125.
[2]錢程,陽(yáng)小蘭,朱福喜.基于Python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)[J].黑龍江科技信息,2016,(36):273.
[3]康計(jì)良.Python語(yǔ)言的可視化編程環(huán)境的設(shè)計(jì)與實(shí)現(xiàn)[D].西安電子科技大學(xué),2012.