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