王 康 史雅婷 梁洪炎 吉卓嘎 強巴卓瑪
西藏民族大學信息工程學院
在大數(shù)據(jù)時代,誰擁有了數(shù)據(jù),誰就有更多的籌碼。氣象服務是這個時代必不可少的部分,人們每天的出行計劃需要依靠今天的天氣狀況來定。氣象部門每天通過手機、電視、報紙、廣播、短信來告知人們今天的天氣狀況,以防范自然災害等突發(fā)狀況。截至2018年,全國共有661個市,每小時統(tǒng)計一次,在一天內就收集到了661×24=15 864條數(shù)據(jù)。
網(wǎng)絡爬蟲本質上是利用程序在網(wǎng)上搜集有用的數(shù)據(jù),是一種按照一定的規(guī)則,自動抓取互聯(lián)網(wǎng)信息的腳本。開發(fā)者可以隨意地擴展各個組件,來實現(xiàn)抓取邏輯。網(wǎng)絡爬蟲能幫助人們快捷、方便地獲取天氣網(wǎng)特定城市近7天內的天氣預報數(shù)據(jù)。
網(wǎng)絡爬蟲有很多類型,不同類型的爬蟲適用于不同的場景,本文提到的爬蟲為批量性爬蟲,這種爬蟲一般適用于用戶明確自己想要的信息或者知道所需信息的網(wǎng)絡結構位置。但在一些大數(shù)據(jù)或者超大數(shù)據(jù)的分析與處理中,一般要用增量型爬蟲,其是一種沒有明確限制的爬蟲,信息量大且比較雜亂,需要用機器學習和深度學習對爬去的信息進行分析和處理,而且增量型爬蟲容易被網(wǎng)站反爬蟲程序檢測。除此之外,還有深度網(wǎng)絡爬蟲等。
XPath是在XML文檔中查找信息的一種語言,用于在XML文檔中通過元素和屬性進行導航。XPath使用路徑表達式來選取XML文檔中的節(jié)點或節(jié)點集。XPath依賴于Python中的lxml第三方類包。XPath使用路徑表達式選取XML文檔中的節(jié)點或節(jié)點集。正則表達式是一個特殊的字符序列,用來檢查一個字符串是否與某種模式匹配,通過特殊的語法來表示。正則表達式依賴于Python中的re模塊。部分正則表達式常用符號如表1所示,正則表達式的書寫規(guī)則較多,這里不再一一贅述。XPath解析的原理如圖1所示。
表1 具體正則表達式常見符號(部分)
圖1 XPath解析的原理
lxml用于解析XML和HTML文件??梢钥焖俣ㄎ?,搜索、獲取特定內容。其支持XML Path Language (XPath) 和 Extensible Stylesheet Language Transformation (XSLT),并且實現(xiàn)了常見的ElementTree API。lxml模塊中常用的有l(wèi)xml.html,lxml.etree,lxml.cssselect,lxml.BeautifulSoup。在天氣數(shù)據(jù)爬取中,本設計主要用到的是lxml.etree模塊。Xwlt是Python用來在Excel寫入數(shù)據(jù)和格式化數(shù)據(jù)的工具包,是用來生成兼容Excel997/2000/XP/2003,OpenOffice.org CalcGnumeric的表格庫。本文利用 xlwt模塊將爬取的天氣數(shù)據(jù)寫入Excel文件。Matplotlib是Python中類似MATLAB的繪圖工具,文章引入Matplotlib模塊將爬取的天氣數(shù)據(jù)以圖片形式保存,并且引入了 xlwt模塊以excel形式保存數(shù)據(jù)。
首先,得到詳情頁的url,隨機獲取一個瀏覽器的表頭,將獲取的瀏覽器信息賦給agant_chose,其核心代碼是agant_chose = random.choice(agant)
其次,確定要爬取天氣數(shù)據(jù)的城市,作者以是衡陽、咸陽、西安、成都、廣州5個城市為例,進行7天天氣數(shù)據(jù)的爬取。爬取天氣數(shù)據(jù)的核心代碼是:html=etree.HTML(data.text)
first_weather=html.xpath(‘/html/body/div[5]/div[1]/div[1]/div[2]/ul/li[1]/p[1]/text()’)。上述代碼只是對某個節(jié)點的數(shù)據(jù)的爬取,而讀者可以根據(jù)自己想要的數(shù)據(jù)所處的位置編寫代碼來爬取自己想要的節(jié)點或節(jié)點集數(shù)據(jù)。根據(jù)代碼所寫的html路徑所選取的節(jié)點依次將爬取的近7天的天氣數(shù)據(jù)進行保存。數(shù)據(jù)爬取過程如圖2所示。
圖2 爬取數(shù)據(jù)的過程
利用python語言中帶的xwlt模塊和matplotib模塊將保存的數(shù)據(jù)進行可視化處理,讓數(shù)據(jù)可以用折線圖和Excel表格形式保存,讓數(shù)據(jù)變得更加生動形象并且能夠更好地利用。將爬取的天氣數(shù)據(jù)寫入excel文件,核心代碼是excelpath=(‘{}.xls’.format(city_name[number])
Workbook=xlwt.Workbook(encoding=’utf-8’)。將數(shù)據(jù)用圖片的形式保存的核心代碼是pyplot.plot(x,highest_temperature)
pyplot.plot(x, lowest_temperature),以西安為例的excel表格的部分數(shù)據(jù)如圖3所示。
圖3 以excel形式保存的部分天氣數(shù)據(jù)(西安)
本文介紹了利用XPath爬取網(wǎng)頁數(shù)據(jù)的相關原理,并爬取了一些天氣數(shù)據(jù)。利用XPath爬取網(wǎng)頁數(shù)據(jù)簡單而且靈活,相對于使用正則表達式稍簡單,可以在知道數(shù)據(jù)爬取的HTML位置或者是爬取的數(shù)據(jù)的網(wǎng)頁位置相對固定的情況下使用,適合剛接觸Python爬蟲的人。在爬蟲開發(fā)中,為追求高效可以優(yōu)先選擇正則表達式。