大數(shù)據(jù)采集與預(yù)處理課件:requests技術(shù)應(yīng)用案例-業(yè)務(wù)網(wǎng)站D靜態(tài)數(shù)據(jù)采集-1_第1頁
大數(shù)據(jù)采集與預(yù)處理課件:requests技術(shù)應(yīng)用案例-業(yè)務(wù)網(wǎng)站D靜態(tài)數(shù)據(jù)采集-1_第2頁
大數(shù)據(jù)采集與預(yù)處理課件:requests技術(shù)應(yīng)用案例-業(yè)務(wù)網(wǎng)站D靜態(tài)數(shù)據(jù)采集-1_第3頁
大數(shù)據(jù)采集與預(yù)處理課件:requests技術(shù)應(yīng)用案例-業(yè)務(wù)網(wǎng)站D靜態(tài)數(shù)據(jù)采集-1_第4頁
大數(shù)據(jù)采集與預(yù)處理課件:requests技術(shù)應(yīng)用案例-業(yè)務(wù)網(wǎng)站D靜態(tài)數(shù)據(jù)采集-1_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

使用WEBAPI采集數(shù)據(jù)——爬取業(yè)務(wù)網(wǎng)站D

本章學(xué)習(xí)目標了解業(yè)務(wù)網(wǎng)站D的基本含義及使用方法了解WEBAPI的基本概念掌握業(yè)務(wù)網(wǎng)站D開放API的數(shù)據(jù)特點了解業(yè)務(wù)網(wǎng)站D的API進行數(shù)據(jù)采集和清洗以及持久化存儲WebAPI是網(wǎng)絡(luò)應(yīng)用程序接口。它包含了廣泛的功能,網(wǎng)絡(luò)應(yīng)用通過API接口,可以實現(xiàn)存儲服務(wù)、消息服務(wù)、計算服務(wù)等能力,利用這些能力可以開發(fā)出功能的強大web應(yīng)用。4.1任務(wù)描述

本任務(wù)將使用業(yè)務(wù)網(wǎng)站D提供的WEBAPI實現(xiàn)數(shù)據(jù)的采集。業(yè)務(wù)網(wǎng)站D提供了豐富的開放WEBAPI供廣大開發(fā)者使用。通過這些WEBAPI的文檔定義規(guī)范,將有針對性地使用爬蟲工具采集針對“repositories?q=spider”,即庫名為spider的業(yè)務(wù)網(wǎng)站D項目的基本信息,并使用sorted方法根據(jù)所有項目的分數(shù)進行排名,以及保存至MySQL數(shù)據(jù)庫中。4.2業(yè)務(wù)網(wǎng)站D4.2.1業(yè)務(wù)網(wǎng)站D的概述作為一個知名的開源分布式版本控制系統(tǒng),業(yè)務(wù)網(wǎng)站D(http://www.github/),能夠快速,高效地處理各種大小項目的版本控制和管理。起初,業(yè)務(wù)網(wǎng)站D只是用于管理Linux內(nèi)核開發(fā),但隨著開源軟件的不斷增多,越來越多的應(yīng)用程序都將自己的項目遷移到業(yè)務(wù)網(wǎng)站D上,目前業(yè)務(wù)網(wǎng)站D擁有超過數(shù)百萬開發(fā)者用戶?,F(xiàn)在,業(yè)務(wù)網(wǎng)站D不僅提供項目的版本控制,還能夠讓開發(fā)者共享已有代碼。如圖4-1所示。圖4-1業(yè)務(wù)網(wǎng)站D首頁4.2.2業(yè)務(wù)網(wǎng)站D的基本用法

在登錄業(yè)務(wù)網(wǎng)站D之后,可以通過搜索控件搜索特定的關(guān)鍵字信息包括作者姓名,項目名稱以及基于特定語言的項目等等,可以單擊“Startaproject”建立一個自己的項目庫,可以在“Issues”中查看之前項目反饋的處理信息,可以在“Explore”中查找自己感興趣的項目信息,可以在“Marketplace”搜索自己需要的項目工具和資源。如圖4-2所示.圖4-2業(yè)務(wù)網(wǎng)站D用戶首頁

這里將建立一個項目庫,并在業(yè)務(wù)網(wǎng)站D的WEBAPI中查詢到它。1)單擊“Startaproject”建立一個的項目庫,選擇一個“Owner”作為項目的擁有者,并給“Repositoryname”添加一個項目名稱。同時,還可以給項目附加一些額外的信息描述“Description”。然后選擇“Public”或者“Private”分別表示任何人都能夠看見和使用此庫和只有指定的人群可以看見和使用此庫。最后根據(jù)是創(chuàng)建一個全新的庫還是通過導(dǎo)入之前已有的庫決定是否打鉤“InitializethisrepositorywithaREADME”。單擊“Createrepository”創(chuàng)建該庫。如圖4-3所示。圖4-3配置項目庫基本信息2)成功創(chuàng)建該項目庫之后,就可以對該項目庫進行維護管理。包括“Createnewfile”創(chuàng)建新文件,“Uploadfiles”上傳文件,“Findfile”找文件,“Cloneordownload”克隆或下載文件等。如圖4-4所示。圖4-4項目庫維護管理4.3WEBAPI 4.3.1WEBAPI的概述 作為網(wǎng)站的主要組成部分,WEBAPI可以實現(xiàn)用戶對特定信息的需求。WEBAPI最主要的功能是實現(xiàn)構(gòu)建基于HTTP的面向各種客戶端的服務(wù)框架。WEBAPI通過基于HTTPREQUEST的各種動作GET,POST,PUT,DELETE實現(xiàn)客戶端向服務(wù)器請求CREATE,RETRIEVE,UPDATE,DELETE操作,并使用HTTPRESPONSE的HttpStatusCode從服務(wù)器獲得HTTPREQUEST的處理結(jié)果狀態(tài)。另外,REQUEST和RESPONSE的數(shù)據(jù)格式是易于處理的JSON或XML格式。因此,WEBAPI對于高度依賴第三方數(shù)據(jù)源的應(yīng)用具有十分重要的使用價值,特別是對于實時性要求比較高的應(yīng)用程序。接下來,將是介紹如何使用WEPAPI獲取GitHub的特定信息。4.3.2業(yè)務(wù)網(wǎng)站D開放API的數(shù)據(jù)特點由于業(yè)務(wù)網(wǎng)站D是一個分布式系統(tǒng),因此,在業(yè)務(wù)網(wǎng)站D中并不存在主庫這樣的概念,開發(fā)者通過克隆即可將每一個完整的庫(repositories)復(fù)制到本地機器中獨立使用,任何兩個庫之間的不一致之處都可以進行合并。那么如何訪問和使用這些項目庫,就必須要使用到業(yè)務(wù)網(wǎng)站D的開放API。下面是api.github/的WEBAPI列表。如圖4-5所示。圖4-5GitHub開放API列表從輸出的結(jié)果中可以看到,WEBAPI中的映射含有豐富的數(shù)據(jù)。例如,映射包含URL,還有為URL提供參數(shù)的方式。其中示例"repository_search_url":"api.github/search/repositories?q={query}{&page,per_page,sort,order}"中,repository_search_url鍵對應(yīng)的URL表示用于在GitHub中搜索代碼庫,此外還指明了如何構(gòu)建傳給URL的參數(shù)。其中,q表示需要查詢的庫名稱關(guān)鍵字。page表示限制查詢結(jié)果顯示的總頁數(shù)。per_page表示限制每頁里面顯示查詢到的數(shù)據(jù)個數(shù)。sort表示根據(jù)一定的篩選方式進行顯示。order表示按照一定的排序方式進行顯示。參數(shù)之間使用&進行分隔。這個WEBAPI返回的數(shù)據(jù)格式為JSON(JavaScriptObjectNotation,JavaScript對象表示法)格式。JSON是一種“輕量級數(shù)據(jù)交換格式”。JSON正在快速成為Web服務(wù)的事實標準。JSON之所以如此流行,有以下兩個原因:一是,JSON易于閱讀。與XML等序列化格式相比,JSON很好地平衡了人類可讀性。二是,只需小幅修改,JSON就能在JavaScript中使用。在客戶端和服務(wù)器端都能同樣良好使用的數(shù)據(jù)格式一定會勝出。在當(dāng)今的WEB程序設(shè)計中,不論后臺服務(wù)器代碼使用何種語言,前端使用JavaScript傳遞JSON數(shù)據(jù)可以實現(xiàn)前端和后臺服務(wù)器代碼之間數(shù)據(jù)交互的通用模型。因此,在WEB前端和后臺的數(shù)據(jù)交互中使用占據(jù)了主導(dǎo)地位。這里使用業(yè)務(wù)網(wǎng)站D開放API中的api.github/search/repositories?q=spider&per_page=1&sort=score&order=desc表示從業(yè)務(wù)網(wǎng)站D的repositories里面查詢q=spider,即庫名關(guān)鍵字是spider。顯示結(jié)果根據(jù)sort=score和order=desc,即按照符合條件的庫的得分以降序的方式顯示。顯示方式根據(jù)per_page=2,即每個頁面只顯示2個查詢結(jié)果。如圖4-6所示。a)b)圖4-6業(yè)務(wù)網(wǎng)站DAPI查詢結(jié)果a)第一個查詢結(jié)果的部分信息b)第二個查詢結(jié)果的部分信息從查詢結(jié)果可以看到,兩個查詢結(jié)果都是以JASON的數(shù)據(jù)格式返回的,并且都具有相同的鍵以及對應(yīng)不同的值。例如,第一個查詢結(jié)果的鍵“id”是52476585,第二個查詢結(jié)果的鍵“id”是74628476。這樣可以極大地方便數(shù)據(jù)的統(tǒng)一管理和查詢檢索。4.3.3業(yè)務(wù)網(wǎng)站D的API請求數(shù)據(jù)

1.業(yè)務(wù)網(wǎng)站D的API結(jié)構(gòu)分析下面使用業(yè)務(wù)網(wǎng)站D的WebAPI來實現(xiàn)數(shù)據(jù)的請求。首先,來分析一下這個WEBAPI的內(nèi)容。api.github/users/{user}/repos{?type,page,per_page,sort}(1)https表示使用的網(wǎng)絡(luò)協(xié)議是基于安全的超文本傳輸協(xié)議。(2)api.github表示網(wǎng)站的域名,經(jīng)過域名服務(wù)器解析之后便可得到服務(wù)器的IP地址。(3)/users/{user}/repos表示該服務(wù)器的文件系統(tǒng)中的文件夾或文件的虛擬路徑。這里的{user}表示需要設(shè)置的用戶名。(4){?type,page,per_page,sort}表示問號后面可以使用的鍵。type表示要查找的文件類型或項目類型。page表示限制查詢結(jié)果顯示的總頁數(shù)。per_page表示限制每頁里面顯示查詢到的數(shù)據(jù)個數(shù)。sort表示根據(jù)一定的篩選方式進行顯示。參數(shù)的目的是向服務(wù)器請求特定的信息。2.業(yè)務(wù)網(wǎng)站D的API請求實例因此,api.github/users/simonlee1984/repos?type=python&per_page=2這個WEBAPI的作用是請求使用基于安全的超文本傳輸協(xié)議向名叫api.github的服務(wù)器中的文件夾路徑為/users/simonlee1984/repos?type=python&per_page=2中的用戶名是simonlee1984的用戶所維護的項目庫數(shù)據(jù)中與python相關(guān)的內(nèi)容,并且以每頁2各個項目的形式進行顯示。這個WEBAPI在瀏覽器中輸出的結(jié)果如圖4-7所示。圖4-7simonlee1984的python相關(guān)項目庫simonlee1984的python_crawler項目庫b)simonlee1984的python_spider項目庫b)a)從輸出的結(jié)果中可以看到,這個WEBAPI返回的數(shù)據(jù)格式為JSON。其中,“name”表示每個項目庫的名稱,全部都是與Python相關(guān)的項目庫?!皃rivate”表示該項目庫是否公開讓所有人瀏覽和使用。False表示公開?!皁wner”表示該項目庫所有者的相關(guān)信息,包括:“url”表示指向該擁有者在GitHub的主頁?!癴ollowers_url”表示關(guān)注該作者的其他作者信息?!癴ollowing_url”表示該作者所關(guān)注的其他作者信息?!皉epos_url”表示該作者所維護管理的所有項目庫等等。4.3.4獲取API的響應(yīng)數(shù)據(jù)

在分析了業(yè)務(wù)網(wǎng)站D的WEBAPI結(jié)構(gòu)之后,本節(jié)將使用Python獲取業(yè)務(wù)網(wǎng)站DWEBAPI的指定數(shù)據(jù),由于將獲得的響應(yīng)數(shù)據(jù)所包含的值比較多,不便于顯示,所以這里將對獲得的數(shù)據(jù)進行簡單清洗,最后輸出響應(yīng)狀態(tài)碼和響應(yīng)數(shù)據(jù)所有的鍵?!緦嵗?-1】下面以這個業(yè)務(wù)網(wǎng)站D的WEBAPI為例,api.github/search/repositories?q=spider。具體步驟如下:1)Python中導(dǎo)入requests庫。importrequests2)定義指定的WEBAPI的URL,并將其賦給變量api_url。api_url='api.github/search/repositories?q=spider'3)使用requests庫的get方法獲得WEBAPI的Response對象。req=requests.get(api_url)4)查看Response的屬性值。status_code表示服務(wù)器處理后返回值的狀態(tài)(200表示成功)。print('狀態(tài)碼:',req.status_code)5)使用json方法將Response的數(shù)據(jù)轉(zhuǎn)換為JSON的數(shù)據(jù)對象。req_dic=req.json()6)使用為JSON的數(shù)據(jù)對象keys方法獲得鍵,并打印輸出結(jié)果。print(req_dic.keys())7)運行結(jié)果顯示。狀態(tài)碼:200dict_keys(['total_count','incomplete_results','items'])完整代碼如下:importrequestsapi_url='api.github/search/repositories?q=spider'req=requests.get(api_url)print('狀態(tài)碼:',req.status_code)req_dic=req.json()print(req_dic.keys())1.清洗API的響應(yīng)數(shù)據(jù)【實例4-2】將進一步地處理響應(yīng)的數(shù)據(jù)。本節(jié)將在前一節(jié)的基礎(chǔ)之上,使用Python將獲得API響應(yīng)數(shù)據(jù)進行清洗,有針對性地獲得在業(yè)務(wù)網(wǎng)站D中所有與spider有關(guān)的項目庫的總數(shù),驗證是否完全獲得了本次API的響應(yīng)數(shù)據(jù),返回當(dāng)前瀏覽器頁面所顯示的項目庫數(shù)量,查看第一個項目中的鍵數(shù)量,獲得第一個項目中的具體內(nèi)容,獲得第一個項目作者的登錄名,獲得第一個項目的全名,獲得第一個項目的描述,獲得第一個項目評分。具體步驟如下:(1)Python中導(dǎo)入requests庫importrequests(2)定義指定的WEBAPI的URLapi_url='api.github/search/repositories?q=spider'(3)使用requests庫的get方法獲得WEBAPI的Response對象req=requests.get(api_url)(4)查看Response的屬性值。status_code表示服務(wù)器處理后返回值的狀態(tài)(200表示成功)。print('狀態(tài)碼:',req.status_code)4.3.5處理API的響應(yīng)數(shù)據(jù)

(5)使用json方法將Response的數(shù)據(jù)轉(zhuǎn)換為JSON的數(shù)據(jù)對象req_dic=req.json()(6)打印輸出字典對象req_dic的鍵為’total_count’的值,該值表示與spider有關(guān)的庫總數(shù)。print('與spider有關(guān)的庫總數(shù):',req_dic['total_count'])(7)打印輸出字典對象req_dic的鍵為’incomplete_results’的值,該值表示本次WEBAPI請求是否完成。其中,false表示完整,true表示不完整。print('本次請求是否完整:',req_dic['incomplete_results'])(8)獲得字典對象req_dic的鍵為’items’的值,并將其賦值給變量req_dic_items。注意,req_dic_items也是一個數(shù)據(jù)類型為字典的數(shù)組。req_dic_items=req_dic['items'](9)打印輸出req_dic_items的元素個數(shù)print('當(dāng)前頁面返回的項目數(shù)量:',len(req_dic_items))(10)通過數(shù)組下標獲取req_dic_items的第一個元素,即第一個spider的項目信息。req_dic_items_first也是一個數(shù)據(jù)類型為字典的數(shù)組。req_dic_items_first=req_dic_items[0](11)打印輸出req_dic_items_first的元素個數(shù)print('查看第一個項目中的鍵數(shù)量:',len(req_dic_items_first))(12)打印輸出req_dic_items_first的具體內(nèi)容print('第一個項目中的具體內(nèi)容:',req_dic_items_first)(13)打印輸出req_dic_items_first中鍵為’owner’的值中嵌套的鍵值對’login’的值。該值表示第一個項目的作者登錄名。print('獲得第一個項目作者的登錄名:',req_dic_items_first['owner']['login'])(14)打印輸出req_dic_items_first中鍵為’full_name’的值。該值表示第一個項目的全名print('獲得第一個項目的全名:',req_dic_items_first['full_name'])(15)打印輸出req_dic_items_first中鍵為’description’的值。該值表示第一個項目的描述print('獲得第一個項目的描述:',req_dic_items_first['description'])(16)打印輸出req_dic_items_first中鍵為’score’的值。該值表示第一個項目

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論