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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

1.業(yè)務(wù)網(wǎng)站D的API結(jié)構(gòu)分析下面使用業(yè)務(wù)網(wǎng)站D的WebAPI來實(shí)現(xiàn)數(shù)據(jù)的請(qǐng)求。首先,來分析一下這個(gè)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}表示問號(hào)后面可以使用的鍵。type表示要查找的文件類型或項(xiàng)目類型。page表示限制查詢結(jié)果顯示的總頁(yè)數(shù)。per_page表示限制每頁(yè)里面顯示查詢到的數(shù)據(jù)個(gè)數(shù)。sort表示根據(jù)一定的篩選方式進(jìn)行顯示。參數(shù)的目的是向服務(wù)器請(qǐng)求特定的信息。2.業(yè)務(wù)網(wǎng)站D的API請(qǐng)求實(shí)例因此,api.github/users/simonlee1984/repos?type=python&per_page=2這個(gè)WEBAPI的作用是請(qǐng)求使用基于安全的超文本傳輸協(xié)議向名叫api.github的服務(wù)器中的文件夾路徑為/users/simonlee1984/repos?type=python&per_page=2中的用戶名是simonlee1984的用戶所維護(hù)的項(xiàng)目庫(kù)數(shù)據(jù)中與python相關(guān)的內(nèi)容,并且以每頁(yè)2各個(gè)項(xiàng)目的形式進(jìn)行顯示。這個(gè)WEBAPI在瀏覽器中輸出的結(jié)果如圖4-7所示。圖4-7simonlee1984的python相關(guān)項(xiàng)目庫(kù)simonlee1984的python_crawler項(xiàng)目庫(kù)b)simonlee1984的python_spider項(xiàng)目庫(kù)b)a)從輸出的結(jié)果中可以看到,這個(gè)WEBAPI返回的數(shù)據(jù)格式為JSON。其中,“name”表示每個(gè)項(xiàng)目庫(kù)的名稱,全部都是與Python相關(guān)的項(xiàng)目庫(kù)。“private”表示該項(xiàng)目庫(kù)是否公開讓所有人瀏覽和使用。False表示公開?!皁wner”表示該項(xiàng)目庫(kù)所有者的相關(guān)信息,包括:“url”表示指向該擁有者在GitHub的主頁(yè)?!癴ollowers_url”表示關(guān)注該作者的其他作者信息。“following_url”表示該作者所關(guān)注的其他作者信息?!皉epos_url”表示該作者所維護(hù)管理的所有項(xiàng)目庫(kù)等等。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ù)所包含的值比較多,不便于顯示,所以這里將對(duì)獲得的數(shù)據(jù)進(jìn)行簡(jiǎn)單清洗,最后輸出響應(yīng)狀態(tài)碼和響應(yīng)數(shù)據(jù)所有的鍵。【實(shí)例4-1】下面以這個(gè)業(yè)務(wù)網(wǎng)站D的WEBAPI為例,api.github/search/repositories?q=spider。具體步驟如下:1)Python中導(dǎo)入requests庫(kù)。importrequests2)定義指定的WEBAPI的URL,并將其賦給變量api_url。api_url='api.github/search/repositories?q=spider'3)使用requests庫(kù)的get方法獲得WEBAPI的Response對(duì)象。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ù)對(duì)象。req_dic=req.json()6)使用為JSON的數(shù)據(jù)對(duì)象keys方法獲得鍵,并打印輸出結(jié)果。print(req_dic.keys())7)運(yùn)行結(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ù)【實(shí)例4-2】將進(jìn)一步地處理響應(yīng)的數(shù)據(jù)。本節(jié)將在前一節(jié)的基礎(chǔ)之上,使用Python將獲得API響應(yīng)數(shù)據(jù)進(jìn)行清洗,有針對(duì)性地獲得在業(yè)務(wù)網(wǎng)站D中所有與spider有關(guān)的項(xiàng)目庫(kù)的總數(shù),驗(yàn)證是否完全獲得了本次API的響應(yīng)數(shù)據(jù),返回當(dāng)前瀏覽器頁(yè)面所顯示的項(xiàng)目庫(kù)數(shù)量,查看第一個(gè)項(xiàng)目中的鍵數(shù)量,獲得第一個(gè)項(xiàng)目中的具體內(nèi)容,獲得第一個(gè)項(xiàng)目作者的登錄名,獲得第一個(gè)項(xiàng)目的全名,獲得第一個(gè)項(xiàng)目的描述,獲得第一個(gè)項(xiàng)目評(píng)分。具體步驟如下:(1)Python中導(dǎo)入requests庫(kù)importrequests(2)定義指定的WEBAPI的URLapi_url='api.github/search/repositories?q=spider'(3)使用requests庫(kù)的get方法獲得WEBAPI的Response對(duì)象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ù)對(duì)象req_dic=req.json()(6)打印輸出字典對(duì)象req_dic的鍵為’total_count’的值,該值表示與spider有關(guān)的庫(kù)總數(shù)。print('與spider有關(guān)的庫(kù)總數(shù):',req_dic['total_count'])(7)打印輸出字典對(duì)象req_dic的鍵為’incomplete_results’的值,該值表示本次WEBAPI請(qǐng)求是否完成。其中,false表示完整,true表示不完整。print('本次請(qǐng)求是否完整:',req_dic['incomplete_results'])(8)獲得字典對(duì)象req_dic的鍵為’items’的值,并將其賦值給變量req_dic_items。注意,req_dic_items也是一個(gè)數(shù)據(jù)類型為字典的數(shù)組。req_dic_items=req_dic['items'](9)打印輸出req_dic_items的元素個(gè)數(shù)print('當(dāng)前頁(yè)面返回的項(xiàng)目數(shù)量:',len(req_dic_items))(10)通過數(shù)組下標(biāo)獲取req_dic_items的第一個(gè)元素,即第一個(gè)spider的項(xiàng)目信息。req_dic_items_first也是一個(gè)數(shù)據(jù)類型為字典的數(shù)組。req_dic_items_first=req_dic_items[0](11)打印輸出req_dic_items_first的元素個(gè)數(shù)print('查看第一個(gè)項(xiàng)目中的鍵數(shù)量:',len(req_dic_items_first))(12)打印輸出req_dic_items_first的具體內(nèi)容print('第一個(gè)項(xiàng)目中的具體內(nèi)容:',req_dic_items_first)(13)打印輸出req_dic_items_first中鍵為’owner’的值中嵌套的鍵值對(duì)’login’的值。該值表示第一個(gè)項(xiàng)目的作者登錄名。print('獲得第一個(gè)項(xiàng)目作者的登錄名:',req_dic_items_first['owner']['login'])(14)打印輸出req_dic_items_first中鍵為’full_name’的值。該值表示第一個(gè)項(xiàng)目的全名print('獲得第一個(gè)項(xiàng)目的全名:',req_dic_items_first['full_name'])(15)打印輸出req_dic_items_first中鍵為’description’的值。該值表示第一個(gè)項(xiàng)目的描述print('獲得第一個(gè)項(xiàng)目的描述:',req_dic_items_first['description'])(16)打印輸出req_dic_items_first中鍵為’score’的值。該值表示第一個(gè)項(xiàng)目

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論