版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于Python的數(shù)據(jù)處理技術(shù)本章知識(shí)點(diǎn)(1)了解網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集的概念。(2)理解NumPy數(shù)值計(jì)算庫(kù)。(3)理解Pandas數(shù)據(jù)分庫(kù)。(4)掌握網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集的方法。(5)掌握NumPy和Pandas應(yīng)用。01網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集02數(shù)據(jù)處理PART01網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲是一種數(shù)據(jù)采集的主要方式,也是通過(guò)網(wǎng)絡(luò)獲取數(shù)據(jù)信息的主要手段和工具。談起網(wǎng)絡(luò)爬蟲,離不開搜索引擎,搜索引擎是伴隨互聯(lián)網(wǎng)的發(fā)展而產(chǎn)生和發(fā)展的,幾乎每個(gè)人上網(wǎng)都會(huì)使用搜索引擎,例如百度、谷歌都是大家常用的搜索引擎。搜索引擎的工作過(guò)程可以簡(jiǎn)單視為從互聯(lián)網(wǎng)上抓取信息、建立索引、搜索信息三個(gè)部分,抓取信息的主要方式就是采用網(wǎng)絡(luò)爬蟲。網(wǎng)絡(luò)爬蟲,又稱為網(wǎng)絡(luò)蜘蛛,網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動(dòng)地抓取互聯(lián)網(wǎng)信息的程序或者腳本。網(wǎng)絡(luò)蜘蛛即WebSpider,是一個(gè)非常形象的名字。把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么Spider就是在網(wǎng)上爬來(lái)爬去的蜘蛛。網(wǎng)絡(luò)蜘蛛是通過(guò)網(wǎng)頁(yè)的鏈接地址來(lái)尋找網(wǎng)頁(yè),從網(wǎng)站某一個(gè)頁(yè)面(通常是首頁(yè))開始,讀取網(wǎng)頁(yè)的內(nèi)容,找到在網(wǎng)頁(yè)中的其它鏈接地址,然后通過(guò)這些鏈接地址尋找下一個(gè)網(wǎng)頁(yè),這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁(yè)都抓取完為止。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè)網(wǎng)站,那么網(wǎng)絡(luò)蜘蛛就可以用這個(gè)原理把互聯(lián)網(wǎng)上所有的網(wǎng)頁(yè)都抓取下來(lái)。這樣看來(lái),網(wǎng)絡(luò)蜘蛛就是一個(gè)爬行程序,一個(gè)抓取網(wǎng)頁(yè)的程序。網(wǎng)絡(luò)蜘蛛實(shí)際上是一種電腦“機(jī)器人”(ComputerRobot),一種專門用于檢索信息的“機(jī)器人”程序,就像蜘蛛一樣在網(wǎng)絡(luò)間爬來(lái)爬去,反反復(fù)復(fù),不知疲倦。所以,網(wǎng)絡(luò)爬蟲也叫網(wǎng)絡(luò)機(jī)器人。網(wǎng)絡(luò)爬蟲除了通過(guò)頁(yè)面進(jìn)行數(shù)據(jù)采集,也可以通過(guò)各種網(wǎng)絡(luò)接口采集數(shù)據(jù),例如通過(guò)RestfulAPI接口訪問(wèn)數(shù)據(jù),這樣獲取的數(shù)據(jù)格式更加規(guī)范,更加易于處理。網(wǎng)絡(luò)爬蟲有網(wǎng)絡(luò)爬蟲就有反爬蟲。有些網(wǎng)站為了避免數(shù)據(jù)被爬取,會(huì)采用各種各樣的反爬蟲措施。反爬蟲技術(shù)主要分為兩個(gè)環(huán)節(jié),一是識(shí)別爬蟲、二是對(duì)爬取信息做出限制。對(duì)應(yīng)我們的網(wǎng)站也可以設(shè)置網(wǎng)絡(luò)爬蟲的規(guī)則,這里就涉及到robots協(xié)議。Robots協(xié)議(也稱為爬蟲協(xié)議、機(jī)器人協(xié)議等)的全稱是“網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)”(RobotsExclusionProtocol),網(wǎng)站通過(guò)Robots協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取。其目的是保護(hù)網(wǎng)站數(shù)據(jù)和敏感信息,確保用戶個(gè)人信息和隱私不被侵犯。robots.txt(統(tǒng)一小寫)是一種存放于網(wǎng)站根目錄下的ASCII編碼的文本文件,對(duì)搜索引擎訪問(wèn)的內(nèi)容進(jìn)行限制。
為什么需要Robots協(xié)議呢?互聯(lián)網(wǎng)上的網(wǎng)頁(yè)是通過(guò)超級(jí)鏈接互相關(guān)聯(lián)起來(lái)的,從而形成了網(wǎng)頁(yè)的網(wǎng)狀結(jié)構(gòu)。爬蟲的工作方式就像蜘蛛在網(wǎng)上沿著鏈接爬來(lái)爬去,對(duì)于網(wǎng)站的管理者來(lái)說(shuō),就存在這樣的需求,某些路徑下是個(gè)人隱私或者網(wǎng)站管理使用,不想被搜索引擎抓取,比如說(shuō)商品數(shù)據(jù);網(wǎng)站內(nèi)容的所有者是網(wǎng)站管理員,搜索引擎應(yīng)該尊重所有者的意愿,為了滿足以上要求,就需要提供一種網(wǎng)站和爬蟲進(jìn)行溝通的途徑,給網(wǎng)站管理員表達(dá)自己意愿的機(jī)會(huì)。那么robots協(xié)議就此誕生,通過(guò)robots協(xié)議設(shè)置允許網(wǎng)絡(luò)爬蟲爬取信息的權(quán)限和范圍。數(shù)據(jù)采集數(shù)據(jù)采集是更大的概念,上節(jié)所述的網(wǎng)絡(luò)爬蟲只是數(shù)據(jù)采集的一種方式。數(shù)據(jù)采集是進(jìn)行大數(shù)據(jù)分析的前提也是必要條件,在整個(gè)流程中占據(jù)重要地位。數(shù)據(jù)采集的流程即使從網(wǎng)絡(luò)爬蟲的方式來(lái)講也涉及到幾個(gè)環(huán)節(jié),一是通過(guò)網(wǎng)絡(luò)爬蟲爬取數(shù)據(jù),二是爬取數(shù)據(jù)需要把數(shù)據(jù)存儲(chǔ)起來(lái),三是存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)據(jù)的清洗等。本節(jié)概述完數(shù)據(jù)采集后,我們對(duì)網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集涉及到的一些基本概念和技術(shù)做進(jìn)一步的介紹。常見的數(shù)據(jù)采集方式有系統(tǒng)日志采集法、數(shù)據(jù)庫(kù)采集、網(wǎng)絡(luò)數(shù)據(jù)采集法以及其他數(shù)據(jù)采集法等等。網(wǎng)絡(luò)數(shù)據(jù)采集法就是本章的網(wǎng)絡(luò)爬蟲涉及到的內(nèi)容。數(shù)據(jù)采集系統(tǒng)日志采集法,顯而易見,就是采集日志信息。在我們的操作系統(tǒng)中,我們使用的各種應(yīng)用與服務(wù),大部分都有日志文件,系統(tǒng)日志、應(yīng)用日志、安全日志等。我們都知道Linux操作系統(tǒng)在服務(wù)器中應(yīng)用非常廣泛,Linux就有非常完備的日志管理系統(tǒng);用于記錄Linux操作系統(tǒng)中各種運(yùn)行的消息,不同的日志文件記載了不同類型的信息,如Linux內(nèi)核消息、用戶登錄事件、程序錯(cuò)誤等。Linux系統(tǒng)上運(yùn)行的各種應(yīng)用程序也提供日志管理,例如Web應(yīng)用服務(wù)系統(tǒng)Nginx或者Tomcat應(yīng)用,我們就可以從Nginx或者Tomcat應(yīng)用服務(wù)器中采集到每個(gè)訪問(wèn)用戶的來(lái)源IP地址、訪問(wèn)時(shí)間、瀏覽的頁(yè)面、用戶使用的瀏覽器信息等等,通過(guò)這些信息,我們可以用來(lái)分析頁(yè)面點(diǎn)擊量,分析哪些頁(yè)面更受用戶喜歡。數(shù)據(jù)庫(kù)采集數(shù)據(jù)采集數(shù)據(jù)庫(kù)采集主要從數(shù)據(jù)庫(kù)系統(tǒng)中采集數(shù)據(jù),傳統(tǒng)企業(yè)會(huì)使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)MySQL和Oracle等來(lái)存儲(chǔ)數(shù)據(jù)。隨著大數(shù)據(jù)時(shí)代的到來(lái),Redis、MongoDB和HBase等NoSQL數(shù)據(jù)庫(kù)也常用于數(shù)據(jù)的采集。企業(yè)通過(guò)在采集端部署大量數(shù)據(jù)庫(kù),并在這些數(shù)據(jù)庫(kù)之間進(jìn)行負(fù)載均衡和分片,來(lái)完成大數(shù)據(jù)采集工作。關(guān)于數(shù)據(jù)庫(kù),我們知道有關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之分,關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)結(jié)構(gòu)定義是嚴(yán)格和約束嚴(yán)謹(jǐn)?shù)?,?shù)據(jù)存儲(chǔ)的單元是數(shù)據(jù)庫(kù)表,數(shù)據(jù)庫(kù)表有各種數(shù)據(jù)類型的字段,數(shù)據(jù)庫(kù)表之間通過(guò)外鍵形成關(guān)系。我們把關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)稱之謂結(jié)構(gòu)化數(shù)據(jù)。關(guān)系型數(shù)據(jù)庫(kù)對(duì)應(yīng)的有非關(guān)系型數(shù)據(jù)庫(kù),存儲(chǔ)的是非結(jié)構(gòu)化的數(shù)據(jù),什么是非結(jié)構(gòu)化的數(shù)據(jù)呢?我們常見的文檔、圖片、視頻這類數(shù)據(jù)就是非結(jié)構(gòu)化數(shù)據(jù)?;ヂ?lián)網(wǎng)上我們?yōu)g覽到的更多的就是這類數(shù)據(jù)。網(wǎng)絡(luò)爬蟲主要針對(duì)的就是這類非結(jié)構(gòu)化的數(shù)據(jù)。網(wǎng)絡(luò)采集到的數(shù)據(jù)需要進(jìn)行存儲(chǔ),就需要技術(shù)人員選擇存儲(chǔ)的方式,是選擇關(guān)系型數(shù)據(jù)庫(kù)還是非關(guān)系型數(shù)據(jù)庫(kù),需要技術(shù)人員對(duì)這兩種不同類型的數(shù)據(jù)庫(kù)優(yōu)勢(shì)、劣勢(shì)非常清楚才能做出合理和正確的選型。其他數(shù)據(jù)采集包括感知設(shè)備數(shù)據(jù)采集,通過(guò)傳感器、攝像頭和其他智能終端自動(dòng)采集信號(hào)、圖片或錄像來(lái)獲取數(shù)據(jù)等,這里不做過(guò)多敘述。網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)本章會(huì)通過(guò)代碼來(lái)展示網(wǎng)絡(luò)爬蟲和數(shù)據(jù)采集的過(guò)程,讓讀者能夠通過(guò)代碼擴(kuò)展更多的概念,掌握一些入門的技術(shù)。網(wǎng)絡(luò)爬蟲和數(shù)據(jù)采集我們會(huì)提供一個(gè)完整的、簡(jiǎn)單的項(xiàng)目案例,通過(guò)從網(wǎng)絡(luò)上爬取未來(lái)7天的天氣數(shù)據(jù),進(jìn)行一些簡(jiǎn)單的處理。主要涉及到的知識(shí)有Python編程語(yǔ)言、http或https網(wǎng)絡(luò)請(qǐng)求、RestfulAPI編程接口、Python網(wǎng)絡(luò)相關(guān)軟件模塊等。下面逐一進(jìn)行介紹。案例網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)1.Python編程語(yǔ)言Python編程語(yǔ)言在大數(shù)據(jù)、人工智能技術(shù)中應(yīng)用非常廣泛,后面小節(jié)會(huì)采用Python編程語(yǔ)言進(jìn)行代碼實(shí)現(xiàn),代碼實(shí)現(xiàn)相對(duì)簡(jiǎn)單,讀者可以自行安裝一個(gè)Python編程環(huán)境,通過(guò)代碼來(lái)認(rèn)識(shí)Python,掌握最基本的Python語(yǔ)言程序結(jié)構(gòu)即可。讓我們認(rèn)識(shí)一下基本的程序結(jié)構(gòu):#-*-coding:UTF-8-*-defsay_hello():greet_string="hello,world!"#定義一個(gè)字符串print(greet_string)#打印字符串if__name__=='__main__':#程序入口say_hello()保存文件為helloWorld.py,運(yùn)行程序命令:python.\helloWorld.py,就會(huì)輸出hello,world!字符串。在這個(gè)簡(jiǎn)單的程序中,我們定義了一個(gè)函數(shù)say_hello(),在main主程序體種調(diào)用了該函數(shù)。并對(duì)程序作了部分的注釋。網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)2.網(wǎng)絡(luò)請(qǐng)求網(wǎng)絡(luò)爬蟲需要訪問(wèn)互聯(lián)網(wǎng),因此,我們需要了解訪問(wèn)互聯(lián)網(wǎng)所使用的協(xié)議http、https、頁(yè)面的請(qǐng)求(request)與響應(yīng)(response)的概念。我們通過(guò)瀏覽器訪問(wèn)一個(gè)常用的網(wǎng)站:。打開瀏覽器開發(fā)者工具,訪問(wèn)截圖如下:通過(guò)開發(fā)者工具查看的截圖,我們可以看到請(qǐng)求的網(wǎng)頁(yè)的詳細(xì)信息,你可以看到請(qǐng)求、響應(yīng)的數(shù)據(jù),可以查看到cookie、session,可以查詢到網(wǎng)頁(yè)使用的css樣式文件、js文件以及圖片等數(shù)據(jù)。具體大家可以通過(guò)瀏覽器打開開發(fā)者工具詳細(xì)探索一番。這里主要講一些基本的概念。這里要講的就是http和https。網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)剛才我們?cè)L問(wèn)的詳細(xì)地址是“”,使用的就是https協(xié)議。http和https是實(shí)現(xiàn)網(wǎng)絡(luò)通信的網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)協(xié)議是計(jì)算機(jī)之間為了實(shí)現(xiàn)網(wǎng)絡(luò)通信而達(dá)成的一種“約定”或者”規(guī)則“,有了這種”約定“,不同廠商的生產(chǎn)設(shè)備,以及不同操作系統(tǒng)組成的計(jì)算機(jī)之間,就可以實(shí)現(xiàn)通信。HTTP協(xié)議是超文本傳輸協(xié)議的縮寫,英文是HyperTextTransferProtocol。它是從WEB服務(wù)器傳輸超文本標(biāo)記語(yǔ)言(HTML)到本地瀏覽器的傳送協(xié)議。http協(xié)議支持客戶端/服務(wù)端模式,也是一種請(qǐng)求/響應(yīng)模式的協(xié)議。請(qǐng)求方法常用的有GET、POST、patch、delete。從剛才我們請(qǐng)求的截圖中就能看到采用的請(qǐng)求方法是get。HTTPS是HTTP協(xié)議的安全版本,HTTP協(xié)議的數(shù)據(jù)傳輸是明文的,是不安全的,HTTPS使用了SSL/TLS協(xié)議進(jìn)行了加密處理。HTTPS協(xié)議(HyperTextTransferProtocoloverSecureSocketLayer),一般理解為HTTP+SSL/TLS,通過(guò)SSL證書來(lái)驗(yàn)證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信進(jìn)行加密來(lái)實(shí)現(xiàn)數(shù)據(jù)的安全性。SSL(SecureSocketLayer,安全套接字層),為數(shù)據(jù)通訊提供安全支持。http和https使用連接方式不同,默認(rèn)端口也不一樣,http是80,https是443。網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)通過(guò)開發(fā)者工具你可以看到請(qǐng)求頭和響應(yīng)頭,這在網(wǎng)絡(luò)請(qǐng)求、web前端開發(fā)中經(jīng)常用到的知識(shí)。請(qǐng)求頭:請(qǐng)求頭是客戶端發(fā)送給服務(wù)器端的一些信息,使用鍵值對(duì)表示,常見的請(qǐng)求頭及其含義如下:常見請(qǐng)求頭描述Referer瀏覽器通知服務(wù)器,當(dāng)前請(qǐng)求來(lái)自何處。如果是直接訪問(wèn),則不會(huì)有這個(gè)頭。常用于:防盜鏈If-Modified-Since瀏覽器通知服務(wù)器,本地緩存的最后變更時(shí)間。與另一個(gè)響應(yīng)頭組合控制瀏覽器頁(yè)面的緩存。Cookie與會(huì)話有關(guān)技術(shù),用于存放瀏覽器緩存的cookie信息。User-Agent瀏覽器通知服務(wù)器,客戶端瀏覽器與操作系統(tǒng)相關(guān)信息Connection保持連接狀態(tài)。Keep-Alive連接中,close已關(guān)閉Host請(qǐng)求的服務(wù)器主機(jī)名Content-Length請(qǐng)求體的長(zhǎng)度Content-Type如果是POST請(qǐng)求,會(huì)有這個(gè)頭,默認(rèn)值為application/x-www-form-urlencoded,表示請(qǐng)求體內(nèi)容使用url編碼Accept:瀏覽器可支持的MIME類型。文件類型的一種描述方式。MIME格式:大類型/小類型[;參數(shù)]例如:text/html,html文件text/css,css文件text/javascript,js文件image/*,所有圖片文件Accept-Encoding瀏覽器通知服務(wù)器,瀏覽器支持的數(shù)據(jù)壓縮格式。如:GZIP壓縮Accept-Language瀏覽器通知服務(wù)器,瀏覽器支持的語(yǔ)言。各國(guó)語(yǔ)言(國(guó)際化i18n)網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)響應(yīng)頭:響應(yīng)也是鍵值對(duì)形式,服務(wù)器端將信息以鍵值對(duì)的形式返回給客戶端。常見請(qǐng)求頭描述Location指定響應(yīng)的路徑,需要與狀態(tài)碼302配合使用,完成跳轉(zhuǎn)。Content-Type響應(yīng)正文的類型(MIME類型)取值:text/html;charset=UTF-8Content-Disposition通過(guò)瀏覽器以下載方式解析正文取值:attachment;filename=xx.zipSet-Cookie與會(huì)話相關(guān)技術(shù)。服務(wù)器向?yàn)g覽器寫入cookieContent-Encoding服務(wù)器使用的壓縮格式取值:gzipContent-length響應(yīng)正文的長(zhǎng)度Refresh定時(shí)刷新,格式:秒數(shù);url=路徑。url可省略,默認(rèn)值為當(dāng)前頁(yè)。取值:3;url=//三秒刷新頁(yè)面到Server指的是服務(wù)器名稱,默認(rèn)值:Apache-Coyote/1.1??梢酝ㄟ^(guò)conf/server.xml配置進(jìn)行修改。<Connectorport="8080"...server="itcast"/>Last-Modified服務(wù)器通知瀏覽器,文件的最后修改時(shí)間。與If-Modified-Since一起使用。網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)3.RESTfulAPI接口與JSON數(shù)據(jù)格式要弄清楚什么是RESTfulAPI,首先要知道REST是什么。1)表示性狀態(tài)轉(zhuǎn)移(representationstatetransfer,REST)用URI表示資源,用HTTP的方法(GET,POST,PUT,DELETE)表征對(duì)這些資源進(jìn)行操作。RESTfulAPI就是REST風(fēng)格的API?,F(xiàn)在終端平臺(tái)多樣,移動(dòng)、平板、PC等許多媒介向服務(wù)端發(fā)送請(qǐng)求后,如果不適用RESTfulAPI,需要為每個(gè)平臺(tái)的數(shù)據(jù)請(qǐng)求定義相應(yīng)的返回格式,以適應(yīng)前端顯示。但是RESTfulAPI要求前端以一種預(yù)定義的語(yǔ)法格式發(fā)送請(qǐng)求,那么服務(wù)端就只需要定義一個(gè)統(tǒng)一的響應(yīng)接口,不必像之前那樣解析各色各式的請(qǐng)求。Resource:資源,即數(shù)據(jù),存在互聯(lián)網(wǎng)上的可被訪問(wèn)的實(shí)體Representation:數(shù)據(jù)的某種表現(xiàn)形式,如HTML,JSON。StateTransfer:狀態(tài)變化,HTTP方法實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)2)RESTful是典型的基于HTTP的協(xié)議RESTful有以下設(shè)計(jì)原則和規(guī)范資源首先要明確資源就是網(wǎng)絡(luò)上的一個(gè)實(shí)體,可以是文本、圖片、音頻、視頻。資源總是以一定的格式來(lái)表現(xiàn)自己。文本用txt、html;圖片用JPG、JPEG等等。而JSON是RESTfulAPI中最常用的資源表現(xiàn)格式。統(tǒng)一接口對(duì)于業(yè)務(wù)數(shù)據(jù)的CRUD,RESTful用HTTP方法與之對(duì)應(yīng)。URI統(tǒng)一資源標(biāo)識(shí)符,它可以唯一標(biāo)識(shí)一個(gè)資源。注意到,URL(統(tǒng)一資源定位符)是一種URI,因?yàn)樗梢晕ㄒ粯?biāo)志資源。但URL!=URI。應(yīng)該說(shuō)URL是URI的子集。因?yàn)閁RL使用路徑來(lái)唯一標(biāo)識(shí)資源,這只是唯一標(biāo)識(shí)資源的一種方式。還可以用一個(gè)唯一編號(hào)來(lái)標(biāo)識(shí)資源,如example.html.fuce2da23。只不過(guò)這種方式并不被廣泛使用??傊诟拍钌蠈?duì)URL和URI有所區(qū)分。無(wú)狀態(tài)所謂無(wú)狀態(tài)是指所有資源都可以用URI定位,而且這個(gè)定位與其他資源無(wú)關(guān),不會(huì)因?yàn)槠渌Y源的變動(dòng)而變化。這里引入一個(gè)冪等性的概念:無(wú)論一個(gè)操作被執(zhí)行一次還是多次,執(zhí)行后的效果都相同。比如對(duì)某資源發(fā)送GET請(qǐng)求,如果訪問(wèn)一次和訪問(wèn)十次獲得的數(shù)據(jù)一樣,那么就說(shuō)這個(gè)請(qǐng)求具有冪等性。01030402網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)3)JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式JSON采用完全獨(dú)立于語(yǔ)言的文本格式,這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。JSON數(shù)據(jù)格式有兩種結(jié)構(gòu):“名稱/值”對(duì)的集合(Acollectionofname/valuepairs)。不同的語(yǔ)言中,它被理解為對(duì)象(object),記錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hashtable),有鍵列表(keyedlist),或者關(guān)聯(lián)數(shù)組(associativearray)。示例:{"firstName":"Jack","lastName":"Smith","email":"smith@"}值的有序列表(Anorderedlistofvalues)。在大部分語(yǔ)言中,它被理解為數(shù)組(array)。{"people":[{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}]}網(wǎng)絡(luò)爬蟲與數(shù)據(jù)采集相關(guān)知識(shí)4)RESTfulAPI接口以及JSON數(shù)據(jù)格式如何調(diào)用一個(gè)http接口。這里有一個(gè)開放免費(fèi)的天氣API,大家可以自己注冊(cè)一個(gè)免費(fèi)賬號(hào)進(jìn)行測(cè)試。接口如下:接口解釋:Url:/free/week/api方法(method):GET請(qǐng)求的參數(shù):appid、appsecret、city,appid和appsecret是注冊(cè)用戶的id和密鑰,用于安全認(rèn)證使用。接下來(lái)我們直接從瀏覽器中訪問(wèn)查看返回的數(shù)據(jù)。/free/week?appid=53487633&appsecret=eQs06GRV&city=北京網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集應(yīng)用本節(jié)我們希望能夠掌握簡(jiǎn)單的數(shù)據(jù)采集的實(shí)現(xiàn),主要介紹采用Python語(yǔ)言進(jìn)行程序編寫,使用Python網(wǎng)絡(luò)請(qǐng)求模塊進(jìn)行網(wǎng)絡(luò)請(qǐng)求,采集到的數(shù)據(jù)存儲(chǔ)到本地JSON格式文件。數(shù)據(jù)源來(lái)至于/網(wǎng),我們通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取未來(lái)7天的天氣情況。本節(jié)主要是為了示例,不采集所有城市的數(shù)據(jù),選擇10個(gè)城市采集未來(lái)7天的天氣情況,城市選擇包括:北京、上海、廣州、深圳、南寧、桂林、天津、重慶、哈爾濱、拉薩。采集的接口如下:請(qǐng)求地址(URL):/free/week請(qǐng)求方法:GET請(qǐng)求參數(shù)說(shuō)明:參數(shù)名必選類型說(shuō)明備注(示例)appid是string用戶appid需要注冊(cè)免費(fèi)賬號(hào),查看appidappsecret是string用戶appsecret需要注冊(cè)免費(fèi)賬號(hào),查看appsecretcityid否string城市ID請(qǐng)參考城市ID列表city否string城市名稱不要帶市和區(qū),支持市區(qū)縣,不支持鄉(xiāng)鎮(zhèn)級(jí)別;如:青島、鐵西ip否stringIP地址查詢IP所在城市天氣callback否stringjsonp參數(shù)如:jQuery.Callbacksvue否string跨域參數(shù)如果您使用的是react、vue、angular請(qǐng)?zhí)顚懼?1網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集應(yīng)用響應(yīng)參數(shù)說(shuō)明:參數(shù)名類型說(shuō)明備注cityidString城市ID
cityString城市名稱
update_timeString更新時(shí)間
dateString預(yù)報(bào)日期
weaString天氣情況
wea_imgString天氣對(duì)應(yīng)圖標(biāo)
tem_dayString白天溫度(高溫)
tem_nightString白天溫度(低溫)
winString風(fēng)向
win_speedString風(fēng)力等級(jí)網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集應(yīng)用我們先采用postman軟件工具測(cè)試一個(gè)城市接口,采集“北京”未來(lái)7天的天氣情況:請(qǐng)求地址:/free/week?appid=53487633&appsecret=eQs06GRV&city=北京下面Python程序進(jìn)行10個(gè)城市的數(shù)據(jù)采集,先簡(jiǎn)單寫一個(gè)城市的數(shù)據(jù)采集代碼:#-*-coding:UTF-8-*-importrequestsif__name__=='__main__':url='/free/week?appid=53487633&appsecret=eQs06GRV&city=北京'response=requests.get(url=url).json()print(response)程序文件保存在本地,文件名稱為dataCollecting.py。這里需要解釋幾個(gè)知識(shí)點(diǎn):Python的程序運(yùn)行體在前面介紹過(guò),執(zhí)行該程序首先需要Python運(yùn)行環(huán)境,執(zhí)行過(guò)程只需要一個(gè)命令:python.\dataCollecting.py;requests模塊Python的一個(gè)軟件庫(kù),一個(gè)常用HTTP請(qǐng)求的模塊,它使用python語(yǔ)言編寫,可以方便的對(duì)網(wǎng)頁(yè)進(jìn)行爬取,是學(xué)習(xí)python爬蟲較好的http請(qǐng)求模塊。安裝也非常簡(jiǎn)單:pipinstallrequests;json()是Python的內(nèi)置函數(shù),是把Python對(duì)象轉(zhuǎn)化成json數(shù)據(jù)格式的函數(shù)。網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集應(yīng)用運(yùn)行結(jié)果:python.\dataCollecting.py{'cityid':'101010100','city':'北京','update_time':'2021-05-1217:54:01','data':[{'date':'2021-05-12','wea':'多云','wea_img':'yun','tem_day':'26','tem_night':'15','win':'東北風(fēng)','win_speed':'3-4級(jí)轉(zhuǎn)<3級(jí)'},{'date':'2021-05-13','wea':'多云','wea_img':'yun','tem_day':'26','tem_night':'16','win':'東南風(fēng)','win_speed':'3-4級(jí)轉(zhuǎn)<3級(jí)'},{'date':'2021-05-14','wea':'多云轉(zhuǎn)陰','wea_img':'yun','tem_day':'28','tem_night':'18','win':'東南風(fēng)','win_speed':'3-4級(jí)轉(zhuǎn)<3級(jí)'},{'date':'2021-05-15','wea':'小雨','wea_img':'yu','tem_day':'22','tem_night':'14','win':'北風(fēng)','win_speed':'3-4級(jí)'},{'date':'2021-05-16','wea':'多云轉(zhuǎn)晴','wea_img':'yun','tem_day':'25','tem_night':'15','win':'北風(fēng)','win_speed':'<3級(jí)'},{'date':'2021-05-17','wea':'晴','wea_img':'qing','tem_day':'28','tem_night':'14','win':'北風(fēng)','win_speed':'<3級(jí)'},{'date':'2021-05-18','wea':'晴','wea_img':'qing','tem_day':'28','tem_night':'16','win':'西南風(fēng)','win_speed':'<3級(jí)'}]}網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集應(yīng)用目前只是調(diào)用了一個(gè)城市的數(shù)據(jù),下面程序我們把北京、上海、廣州、深圳、南寧、桂林、天津、重慶、哈爾濱、拉薩10個(gè)城市都采集一遍,并保存為JSON格式的文件,保存為文件名alldata.json,程序如下:#-*-coding:UTF-8-*-importrequests#導(dǎo)入requests模塊importjson#導(dǎo)入json模塊if__name__=='__main__':cities=['北京','上海','廣州','深圳','南寧','桂林','天津','重慶','哈爾濱','拉薩']#定義一個(gè)列表alldata=[]#定義一個(gè)空列表forcityincities:url='/free/week?appid=53487633&appsecret=eQs06GRV&city='+cityresponse=requests.get(url=url).json()alldata.append(response)#增加一個(gè)列表元素filename='alldata.json'#把數(shù)據(jù)寫入alldata.json本地文件withopen(filename,'w')asfile_obj:json.dump(alldata,file_obj)上面的程序多增加一些編程知識(shí)。首選把10個(gè)城市定義為一個(gè)list(列表)。編寫了一段for循環(huán),遍歷10個(gè)城市,逐一采集相關(guān)城市的天氣數(shù)據(jù)。這里使用了Python的json模塊來(lái)編碼和解碼JSON對(duì)象,函數(shù)如下:函數(shù)描述json.dump將Python對(duì)象編碼成JSON字符串json.load將已編碼的JSON字符串解碼為Python對(duì)象網(wǎng)絡(luò)爬蟲及數(shù)據(jù)采集應(yīng)用上面程序就是采用了dump函數(shù),將Python對(duì)象編碼成JSON字符串,我們?cè)賹懸粋€(gè)程序,讀取剛才保存的alldata.json文件。如下所示:以上兩個(gè)程序使用到了采用Python語(yǔ)言進(jìn)行文件操作,文件的寫入和讀取文件。#-*-coding:UTF-8-*-importjson#導(dǎo)入json模塊if__name__=='__main__':#主程序體filename='alldata.json'#定義一個(gè)文件名withopen(filename)asfile_obj:#打開文件data=json.load(file_obj)#把JSON格式數(shù)據(jù)解碼為python對(duì)象print(data)#打印輸出數(shù)據(jù)PART02數(shù)據(jù)處理數(shù)據(jù)處理數(shù)據(jù)處理有兩個(gè)非常強(qiáng)大的python軟件庫(kù),一個(gè)是numpy,一個(gè)是pandas。NumPy是Python語(yǔ)言的一個(gè)擴(kuò)充程序庫(kù)。支持高級(jí)大量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。Pandas是基于NumPy的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。Pandas納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。Pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。本節(jié)主要介紹numpy和pandas的一些基礎(chǔ)概念和基本用法,詳細(xì)使用需要進(jìn)行進(jìn)一步的學(xué)習(xí)。Numpy數(shù)值計(jì)算庫(kù)機(jī)器學(xué)習(xí)模型:在編寫機(jī)器學(xué)習(xí)算法時(shí),需要對(duì)矩陣進(jìn)行各種數(shù)值計(jì)算。例如矩陣乘法、換位、加法等。NumPy提供了一個(gè)非常好的庫(kù),用于簡(jiǎn)單(在編寫代碼方面)和快速(在速度方面)計(jì)算。NumPy數(shù)組用于存儲(chǔ)訓(xùn)練數(shù)據(jù)和機(jī)器學(xué)習(xí)模型的參數(shù)。數(shù)學(xué)任務(wù):NumPy對(duì)于執(zhí)行各種數(shù)學(xué)任務(wù)非常有用,如數(shù)值積分、微分、內(nèi)插、外推等。因此,當(dāng)涉及到數(shù)學(xué)任務(wù)時(shí),它形成了一種基于Python的MATLAB的快速替代。圖像處理和計(jì)算機(jī)圖形學(xué):計(jì)算機(jī)中的圖像表示為多維數(shù)字?jǐn)?shù)組。NumPy成為同樣情況下最自然的選擇。實(shí)際上,NumPy提供了一些優(yōu)秀的庫(kù)函數(shù)來(lái)快速處理圖像。例如,鏡像圖像、按特定角度旋轉(zhuǎn)圖像等。NumPy是一個(gè)功能強(qiáng)大的Python庫(kù),主要用于對(duì)多維數(shù)組執(zhí)行計(jì)算。NumPy這個(gè)詞來(lái)源于兩個(gè)單Numerical和Python。NumPy提供了大量的庫(kù)函數(shù)和操作,可以幫助程序員輕松地進(jìn)行數(shù)值計(jì)算。這類數(shù)值計(jì)算廣泛用于以下任務(wù):Numpy數(shù)值計(jì)算庫(kù)NumPy的安裝就像安裝其他python庫(kù)一樣簡(jiǎn)單,最快也是最簡(jiǎn)單的方法是在shell上使用以下命令:pipinstallnumpy。NumPy圍繞這些稱為數(shù)組展開,創(chuàng)建數(shù)組的4種不同方法的代碼如下:a=np.array([0,1,2,3,4])b=np.array((0,1,2,3,4))c=np.arange(5)d=np.linspace(0,2*np.pi,5)print(a)#>>>[01234]print(b)#>>>[01234]print(c)#>>>[01234]print(d)#>>>[0.1.570796333.141592654.712388986.28318531]print(a[3])#>>>3最基本的方法是將序列傳遞給NumPy的array()函數(shù);你可以傳遞任何序列(類數(shù)組),而不僅僅是常見的列表(list)數(shù)據(jù)類型。Numpy數(shù)值計(jì)算庫(kù)請(qǐng)注意,當(dāng)我們打印具有不同長(zhǎng)度數(shù)字的數(shù)組時(shí),它會(huì)自動(dòng)將它們填充出來(lái)。這對(duì)于查看矩陣很有用。對(duì)數(shù)組進(jìn)行索引就像列表或任何其他Python序列一樣。接下來(lái)我們將看看如何使用多維數(shù)組表示矩陣和更多的信息。a=np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])print(a[2,4])#>>>25為了創(chuàng)建一個(gè)2D(二維)數(shù)組,我們傳遞一個(gè)列表的列表(或者是一個(gè)序列的序列)給array()函數(shù)。如果我們想要一個(gè)3D(三維)數(shù)組,我們就要傳遞一個(gè)列表的列表的列表,如果是一個(gè)4D(四維)數(shù)組,那就是列表的列表的列表的列表,以此類推。請(qǐng)注意2D(二維)數(shù)組是如何按行和列排列的。要索引2D(二維)數(shù)組,我們只需引用行數(shù)和列數(shù)即可。Pandas數(shù)據(jù)分析庫(kù)Pandas是基于Num
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2010年高考語(yǔ)文試卷(新課標(biāo))(解析卷)
- 遙感技術(shù)在災(zāi)害評(píng)估-洞察分析
- 宇宙磁場(chǎng)的起源與演化-洞察分析
- 文學(xué)創(chuàng)作與產(chǎn)業(yè)-洞察分析
- 虛擬現(xiàn)實(shí)廣告用戶接受度調(diào)查-洞察分析
- 網(wǎng)絡(luò)安全法律法規(guī)-第18篇-洞察分析
- 音頻電商平臺(tái)發(fā)展研究-洞察分析
- 網(wǎng)絡(luò)營(yíng)銷的用戶體驗(yàn)提升-洞察分析
- 藥物制劑崩解動(dòng)力學(xué)-洞察分析
- 投行風(fēng)險(xiǎn)管理案例剖析-洞察分析
- 2024伊利在線測(cè)評(píng)題
- 紅色簡(jiǎn)約中國(guó)英雄人物李大釗課件
- 小學(xué)師德考評(píng)細(xì)則
- 軟件定義網(wǎng)絡(luò)(SDN)實(shí)戰(zhàn)教程課件
- 上海市住院醫(yī)師規(guī)范化培訓(xùn)公共科目考試題庫(kù)-重點(diǎn)傳染病防治知識(shí)
- 2024江蘇省鐵路集團(tuán)限公司春季招聘24人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2024智能變電站新一代集控站設(shè)備監(jiān)控系統(tǒng)技術(shù)規(guī)范部分
- 企業(yè)反恐專項(xiàng)經(jīng)費(fèi)保障制度
- 電梯工程師在電梯設(shè)計(jì)中的工作內(nèi)容
- 《概率論與數(shù)理統(tǒng)計(jì)基礎(chǔ)》全套教學(xué)課件
- 肥豬銷售合同模板
評(píng)論
0/150
提交評(píng)論