[摘要]互聯(lián)網(wǎng)上有著十分豐富的農(nóng)產(chǎn)品信息,用Python編寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)進(jìn)行網(wǎng)上農(nóng)產(chǎn)品的數(shù)據(jù)抓取,抓取的數(shù)據(jù)存儲(chǔ)進(jìn)文件或者數(shù)據(jù)庫(kù)中,利用Python的第三方庫(kù)進(jìn)行數(shù)據(jù)處理和分析,最后再用Matlabplot庫(kù)輸出可視化圖表,給出分析結(jié)論。這是一種簡(jiǎn)單易行、代價(jià)低廉的大數(shù)據(jù)實(shí)現(xiàn)方法,該方法在中國(guó)廣大的農(nóng)村具有普遍實(shí)現(xiàn)的意義。
[關(guān)鍵詞]大數(shù)據(jù);爬蟲(chóng);Python;處理分析
[中圖分類(lèi)號(hào)]TP311[文獻(xiàn)標(biāo)識(shí)碼] A
1? ? 概述
大數(shù)據(jù)技術(shù)飛速發(fā)展,各行各業(yè)都努力引入這些先進(jìn)技術(shù),從互聯(lián)網(wǎng)上獲取大數(shù)據(jù),進(jìn)行處理和分析,利用分析結(jié)果提高生產(chǎn)力或者輔助決策等。因?yàn)橹袊?guó)廣大的農(nóng)村交通不便、信息閉塞、設(shè)備落后,也沒(méi)有充分的技術(shù)支持和人才儲(chǔ)備,所以雖然在互聯(lián)網(wǎng)上有著豐富的農(nóng)產(chǎn)品信息資源,但要成為有用的數(shù)據(jù),卻面臨著數(shù)據(jù)抓取和處理分析的難題。本文介紹一種設(shè)備要求低且容易實(shí)現(xiàn)的方法,即利用Python語(yǔ)言構(gòu)建網(wǎng)絡(luò)爬蟲(chóng)從互聯(lián)網(wǎng)上獲取數(shù)據(jù)并處理分析,非常適合廣大農(nóng)村的農(nóng)產(chǎn)品大數(shù)據(jù)獲取和處理分析。
2? ? 利用Python網(wǎng)絡(luò)爬蟲(chóng)抓取互聯(lián)網(wǎng)上的農(nóng)產(chǎn)品數(shù)據(jù)
2.1? ? Python爬蟲(chóng)及其基礎(chǔ)庫(kù)
網(wǎng)絡(luò)爬蟲(chóng)是按照一定的規(guī)則自動(dòng)劉曉剛:農(nóng)產(chǎn)品大數(shù)據(jù)的抓取和分析方法探索抓取萬(wàn)維網(wǎng)信息的程序或者腳本。這個(gè)程序可以用多種語(yǔ)言編寫(xiě),用Python編寫(xiě)更是簡(jiǎn)單快捷且功能強(qiáng)大。用戶獲取網(wǎng)絡(luò)數(shù)據(jù)的方式一般是瀏覽器提交請(qǐng)求,從服務(wù)器下載網(wǎng)頁(yè)代碼,解析成頁(yè)面;同理,爬蟲(chóng)的基本流程是模擬瀏覽器發(fā)送請(qǐng)求去獲取網(wǎng)頁(yè)代碼,然后解析并提取有用的數(shù)據(jù),存放于數(shù)據(jù)庫(kù)或文件中。具體過(guò)程是爬蟲(chóng)使用http庫(kù)向目標(biāo)站點(diǎn)發(fā)起請(qǐng)求,即發(fā)送一個(gè)Request,Request包含請(qǐng)求頭、請(qǐng)求體等。如果服務(wù)器能正常響應(yīng),則會(huì)得到一個(gè)回應(yīng)Response,Response包含html、json、圖片、視頻等。Python程序接著解析html數(shù)據(jù),利用正則表達(dá)式、第三方解析庫(kù)如Beautifulsoup,Lxml,解析json數(shù)據(jù)、二進(jìn)制數(shù)據(jù)等,以文本或二進(jìn)制格式寫(xiě)入到文件(如CSV、Excel),或者保存數(shù)據(jù)到數(shù)據(jù)庫(kù)(如MySQL、Mongdb、Redis)中。
為了防止被服務(wù)器當(dāng)作非法用戶主機(jī)拒絕訪問(wèn),爬蟲(chóng)程序都會(huì)加上請(qǐng)求頭。請(qǐng)求頭中包含User-Agent和Cookies、Referrer等信息。User-Agent是一個(gè)特殊字符串,使得服務(wù)器能夠識(shí)別客戶使用的瀏覽器及版本等參數(shù),Cookie用來(lái)保存訪客以前的登錄信息,Referrer說(shuō)明訪問(wèn)源從哪里來(lái),一些大型網(wǎng)站會(huì)通過(guò)Referrer 做防盜鏈策略。
爬蟲(chóng)程序通過(guò)各種庫(kù)來(lái)實(shí)現(xiàn)很多功能。其中最基礎(chǔ)的庫(kù)有三個(gè),其一是Requests庫(kù),它的作用是請(qǐng)求網(wǎng)站獲取網(wǎng)頁(yè)數(shù)據(jù)。其二是BeautifulSoup庫(kù),它把Requests庫(kù)請(qǐng)求到的網(wǎng)頁(yè)解析為容易識(shí)別的Soup文檔,以便過(guò)濾和提取數(shù)據(jù)。其三是Lxml庫(kù),它的主要功能也是解析網(wǎng)頁(yè)源代碼,但使用C語(yǔ)言編寫(xiě),速度比BeautifulSoup庫(kù)更快。
爬蟲(chóng)程序用BeatifulSoup庫(kù)的Lxml解析器來(lái)解析指定的html文檔,結(jié)果存放到變量中。然后通過(guò)Beautifulsoup之標(biāo)簽選擇器功能,用select()方法傳入字符串參數(shù),就能返回需要的選擇結(jié)果。如選擇所有title標(biāo)簽的代碼就是兩句,第一句是soup = BeautifulSoup(html,lxml);第二句是soup.select(“title”),選擇的結(jié)果以列表形式返回;同理,選擇所有p標(biāo)簽中的第三個(gè)標(biāo)簽的代碼是:soup.select(“p:nth-of-type(3)”) ;這種網(wǎng)頁(yè)解析方式簡(jiǎn)單方便,容易理解。
2.2? ? 利用爬蟲(chóng)抓取互聯(lián)網(wǎng)農(nóng)產(chǎn)品信息
獲取互聯(lián)網(wǎng)上的農(nóng)產(chǎn)品數(shù)據(jù),建議分三步進(jìn)行。第一步用Chrome瀏覽器打開(kāi)一個(gè)銷(xiāo)售農(nóng)產(chǎn)品的網(wǎng)頁(yè),在一個(gè)售價(jià)上右擊鼠標(biāo)選擇“檢查”,從而獲取到元素定位;在自動(dòng)跳出的右邊的檢查區(qū)上選擇這個(gè)售價(jià),右擊鼠標(biāo)選擇“copy”下的“copy selector”,獲得選擇器代碼,即售價(jià)元素定位字符串“#page_list > ul > li:nth-child(1) > div.result_btm> span.result_price > i”。第二步,從Chrome中提取User-Agent。在Chrome菜單的開(kāi)發(fā)者工具中選中Network選項(xiàng)中指定的網(wǎng)站名,在其中的Headers選項(xiàng)卡下面的Request Header中復(fù)制User-Agent。第三步,在Python的IDE(如Spyder或PyCharm)中新建Python文件,加入U(xiǎn)ser-Agent,編寫(xiě)其它代碼并運(yùn)行,運(yùn)行結(jié)果輸出一個(gè)農(nóng)產(chǎn)品價(jià)格。如果需要獲取這個(gè)頁(yè)面上所有的農(nóng)產(chǎn)品價(jià)格,只需簡(jiǎn)單地改寫(xiě)代碼利用循環(huán)輸出即可,將selector改為“#page_list > ul > li > div.result_btm > span.result_price > i”,即將“l(fā)i”后面的限定符去掉,表示要抓取所有的“l(fā)i”,從而獲取所有“l(fā)i”中的農(nóng)產(chǎn)品價(jià)格。
2.3? ? 利用爬蟲(chóng)抓取多個(gè)農(nóng)產(chǎn)品的信息
利用爬蟲(chóng)抓取農(nóng)產(chǎn)品中包括價(jià)格在內(nèi)的多個(gè)信息,必須定義多頁(yè)面爬蟲(chóng)。首先是手動(dòng)翻頁(yè)并觀察各網(wǎng)頁(yè)的URL構(gòu)成特點(diǎn),構(gòu)造出所有頁(yè)面的URL存入列表中。次之要根據(jù)URL列表依次循環(huán)取出具體的URL,根據(jù)上面的抓取單個(gè)信息爬蟲(chóng)的原理定義爬蟲(chóng),并添加其它信息的選擇器,增加語(yǔ)句用這些選擇器來(lái)抓取多個(gè)數(shù)據(jù),并循環(huán)存儲(chǔ)抓取的數(shù)據(jù)。
訪問(wèn)多個(gè)出售農(nóng)產(chǎn)品的頁(yè)面,再到每個(gè)頁(yè)面中尋找農(nóng)產(chǎn)品信息抓取信息數(shù)據(jù)時(shí),可能需要跨越多級(jí)頁(yè)面,可以用多級(jí)循環(huán),定義多個(gè)方法完成。為了防止頻繁訪問(wèn)同一個(gè)網(wǎng)站帶來(lái)的限制,建議爬蟲(chóng)運(yùn)行一段時(shí)間休息幾秒,用time庫(kù)的sleep方法實(shí)現(xiàn)。
3? ? 利用Python對(duì)抓取的數(shù)據(jù)進(jìn)行分析
從網(wǎng)頁(yè)抓到數(shù)據(jù)后并不能直接使用,必須經(jīng)過(guò)數(shù)據(jù)處理,去除重復(fù)值、空值等,保留有用的信息,才能進(jìn)行分析。Python可以做多種的數(shù)據(jù)處理,如數(shù)據(jù)清洗,處理缺失數(shù)據(jù)以及清除無(wú)意義的信息,用drop_duplicates方法處理去掉重復(fù)值,也可以用dropna方法刪除數(shù)據(jù)為空所對(duì)應(yīng)的行,還可以用fillna方法用其他數(shù)值替代NaN空值。用slice方法可以進(jìn)行字段抽取,抽出某列上指定位置的數(shù)據(jù)做成新的列;還可以進(jìn)行隨機(jī)抽樣、排名索引、數(shù)據(jù)合并、數(shù)據(jù)計(jì)算、數(shù)據(jù)分組、日期處理、數(shù)據(jù)分析、分組分析、分布分析、交叉分析、結(jié)構(gòu)分析、相關(guān)分析等高級(jí)分析功能,這些功能僅需幾行代碼即可實(shí)現(xiàn)。
4? ? 利用Python對(duì)農(nóng)產(chǎn)品數(shù)據(jù)進(jìn)行可視化分析
處理分析的結(jié)果最后需要制作成效果明顯的可視化圖形。雖然Excel也有這方面的功能,而且操作簡(jiǎn)單,提供的圖形樣式也滿足大部分需要。但是Excel的性能處理不了大數(shù)據(jù),其它的大數(shù)據(jù)工具要么操作復(fù)雜要么設(shè)備要求高端,而使用Python的第三方庫(kù)如Matplotlib或Seaborn就能輕易地完成這個(gè)工作。
從Matplotlib庫(kù)中中導(dǎo)入pyplot繪圖模塊,簡(jiǎn)稱(chēng)為plt。pyplot模塊是Matplotlib最核心的模塊,幾乎所有樣式的2D圖形都是通過(guò)該模塊繪制出來(lái)的。plt.plot是pyplot模塊下面的直線繪制方法,用它可以快速地畫(huà)出需要的折線,用plt.show方法可以將圖形顯示出來(lái)。同理用matplotlib.pyplot.bar方法可以方便地實(shí)現(xiàn)柱形圖,僅把plt.plot方法改成plt.bar即可;用matplotlib.pyplot.pie方法可以畫(huà)出常用的餅狀圖等等……只需要幾行簡(jiǎn)單的代碼和基本的編程知識(shí),就可以得到需要的各種樣式的分析圖表。
[參考文獻(xiàn)]
[1] 姜杉彪,黃凱林,盧昱江,等.基于Python的專(zhuān)業(yè)網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 企業(yè)科技與發(fā)展,2016(08):17-19.
[2] 謝克武.大數(shù)據(jù)環(huán)境下基于python的網(wǎng)絡(luò)爬蟲(chóng)技術(shù)[J].電子制作,2017(09):44-45.
[3] 姚建盛,李淑梅. Python在科學(xué)計(jì)算中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2016(11):76.