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