




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
運(yùn)用爬蟲工具獲取數(shù)據(jù)課前回顧爬蟲:按照一定規(guī)則,自動(dòng)抓取網(wǎng)絡(luò)信息的程序爬蟲原理:模擬瀏覽器請(qǐng)求網(wǎng)站并提取所需的數(shù)據(jù)爬蟲基本流程:發(fā)送請(qǐng)求→獲取響應(yīng)內(nèi)容→解析內(nèi)容→保存數(shù)據(jù)URL:統(tǒng)一資源定位符,每個(gè)文件都有一個(gè)唯一的URL目錄01020304Requests簡(jiǎn)介Requests.get()數(shù)據(jù)保存自定義爬蟲函數(shù)01Requests簡(jiǎn)介HTTP協(xié)議對(duì)資源的操作方法說(shuō)明GET請(qǐng)求獲取URL位置的資源HEAD請(qǐng)求獲取URL位置資源的響應(yīng)消息報(bào)告,即獲得資源的頭部信息POST請(qǐng)求向URL位置的資源后附加新的消息PUT請(qǐng)求向URL位置存儲(chǔ)一個(gè)資源,覆蓋原URL位置的資源PATCH請(qǐng)求局部更新URL位置的資源,即改變?cè)撎庂Y源的部分內(nèi)容DELETE請(qǐng)求刪除URL位置存儲(chǔ)的資源提示以上方法中,GET、HEAD是從服務(wù)器獲取信息到本地,POST、PUT、PATCH、DELETE是從本地向服務(wù)器提交信息;HTTP協(xié)議通過(guò)URL對(duì)資源作定位,通過(guò)以上方法對(duì)資源進(jìn)行管理,每次操作都是獨(dú)立無(wú)狀態(tài)的;在網(wǎng)絡(luò)上,對(duì)服務(wù)器數(shù)據(jù)進(jìn)行修改是比較困難的,在實(shí)際中GET是最為常用的方法。Requests簡(jiǎn)介Requests庫(kù)是一個(gè)功能強(qiáng)大的網(wǎng)絡(luò)請(qǐng)求庫(kù),可以請(qǐng)求網(wǎng)站獲取網(wǎng)頁(yè)上的數(shù)據(jù)。引入規(guī)則:importrequests方法說(shuō)明requests.requst()構(gòu)造一個(gè)請(qǐng)求,最基本的方法,是下面方法的支撐requests.get()獲取html網(wǎng)頁(yè)requests.head()獲取html網(wǎng)頁(yè)的頭信息requests.post()向html網(wǎng)頁(yè)提交追加資源請(qǐng)求requests.put()向html網(wǎng)頁(yè)提交覆蓋資源請(qǐng)求requests.patch()向html網(wǎng)頁(yè)提交局部修改請(qǐng)求requests.delete()向html網(wǎng)頁(yè)提交刪除請(qǐng)求提示requests庫(kù)中的基本方法與HTTP協(xié)議對(duì)資源的操作方法是一一對(duì)應(yīng)的。02Requests.get()requests.get爬取網(wǎng)頁(yè)最簡(jiǎn)單的方法:r=requests.get(url)r=requests.get(url)返回一個(gè)包含服務(wù)器資源的Response對(duì)象構(gòu)造一個(gè)向服務(wù)器請(qǐng)求資源的Request對(duì)象ResponseRequestResponse對(duì)象Response對(duì)象包含爬蟲返回的內(nèi)容,其重要屬性如下:屬性說(shuō)明r.status_code請(qǐng)求返回狀態(tài)碼,200表示連接成功,404或其他表示失敗r.text響應(yīng)內(nèi)容的字符串形式,即url對(duì)應(yīng)的頁(yè)面內(nèi)容r.content響應(yīng)內(nèi)容的二進(jìn)制形式r.headers網(wǎng)頁(yè)頭部信息,有關(guān)響應(yīng)的補(bǔ)充信息,如響應(yīng)數(shù)據(jù)的文件類型等r.encoding從網(wǎng)頁(yè)頭信息(header)中猜測(cè)的響應(yīng)內(nèi)容編碼方式r.apparent_encoding從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式)提示只有返回狀態(tài)碼為200(即連接成功),才能正常查看其他屬性。查看r.text代碼#引入requestsimportrequests#發(fā)送請(qǐng)求(爬取“科云大數(shù)據(jù)中心”-平安銀行股份有限公司的資產(chǎn)負(fù)債表)r=requests.get('/app/bigdata/2022/company/year/zcfzb_000001.csv')#檢測(cè)請(qǐng)求的狀態(tài)碼print(r.status_code)#查看響應(yīng)內(nèi)容print(r.text)Response編碼問(wèn)題為什么使用r.text查看響應(yīng)內(nèi)容會(huì)產(chǎn)生亂碼呢?屬性說(shuō)明r.encoding從網(wǎng)頁(yè)頭信息(header)中猜測(cè)的響應(yīng)內(nèi)容編碼方式r.apparent_encoding從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式)提示亂碼解決方法:r.encoding=r.apparent_encoding原理:通過(guò)r.apparent_encoding屬性獲取響應(yīng)內(nèi)容真實(shí)的編碼方法,再用r.encoding指定該編碼,r.text將會(huì)根據(jù)指定的編碼解析網(wǎng)頁(yè)。請(qǐng)求發(fā)出后,requests會(huì)基于HTTP頭部信息對(duì)響應(yīng)的編碼方式做出推測(cè),當(dāng)訪問(wèn)r.text時(shí),requests會(huì)使用其推測(cè)的編碼方式進(jìn)行解碼,顯示網(wǎng)頁(yè)內(nèi)容。Response編碼問(wèn)題代碼#從頭信息猜測(cè)編碼方式print(r.encoding)#響應(yīng)內(nèi)容真實(shí)編碼方式print(r.apparent_encoding)#指定編碼r.encoding=r.apparent_encoding#查看響應(yīng)內(nèi)容print(r.text)提示改變編碼后,訪問(wèn)r.text時(shí),requests都將使用r.encoding的新值。response對(duì)象異常在訪問(wèn)網(wǎng)頁(yè)的過(guò)程中,常常會(huì)遇到許多異常情況,如:網(wǎng)絡(luò)連接錯(cuò)誤、請(qǐng)求超時(shí)等等,一旦出現(xiàn)異常,就無(wú)法獲取響應(yīng)內(nèi)容。r.raise_for_status():在方法內(nèi)部判斷r.status_code是否為200,如果不是200,則產(chǎn)生異常。使用該方法不需要增加if語(yǔ)句。只有response對(duì)象返回狀態(tài)碼為200(即連接成功),才能順利爬取網(wǎng)頁(yè)內(nèi)容,r.status_code屬性返回狀態(tài)碼,爬蟲過(guò)程中可以使用if語(yǔ)句進(jìn)行判斷。03數(shù)據(jù)保存數(shù)據(jù)保存使用requests.get()爬取數(shù)據(jù)后,需要將數(shù)據(jù)保存至本地,方便后續(xù)直接調(diào)用;保存文件類型:json格式、csv格式、Excel格式等。保存數(shù)據(jù)方法:withopen('文件名稱','寫入模式',編碼方式)asf:f.write()withas語(yǔ)句基本語(yǔ)法格式:with表達(dá)式as變量:#表示將表達(dá)式返回的結(jié)果保存到該變量中
代碼塊open()函數(shù)open()函數(shù):打開一個(gè)文件,創(chuàng)建一個(gè)file對(duì)象。open()函數(shù)語(yǔ)法:open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)open()函數(shù)常用參數(shù):file:打開并返回一個(gè)文件對(duì)象;mode:打開文件的模式,默認(rèn)為“r”,表示只讀;encoding:設(shè)定打開文件時(shí)使用的編碼方式。mode參數(shù)mode參數(shù)指明打開文件的模式,常用模式如下:模式說(shuō)明r以只讀方式打開文件,默認(rèn)模式,文件必須存在w打開一個(gè)文件用于重新寫入,若該文件已經(jīng)存在則打開文件,并從開頭開始編輯,原有內(nèi)容被覆蓋,若該文件不存在,則創(chuàng)建新文件寫入。a打開一個(gè)文件用于追加,若文件存在,新的內(nèi)容將追加寫入已有內(nèi)容之后,若該文件不存在,則創(chuàng)建新文件寫入。bb表示處理二進(jìn)制文件,包括rb、wb、ab提示r、w、a表示處理文本文件,需要指定編碼方式,一般設(shè)置encoding='utf-8'rb、wb、ab表示處理二進(jìn)制文件,不需要指定編碼方式write()函數(shù)write()函數(shù):向文件中寫入指定內(nèi)容。write()函數(shù)語(yǔ)法:write(data)data:寫入的數(shù)據(jù),包括是字符串類型(str)、二進(jìn)制類型(bytes)提示文件打開模式帶b(即rb、wb、ab)時(shí),寫入的數(shù)據(jù)必須是二進(jìn)制類型字符串與二進(jìn)制類型轉(zhuǎn)換:str通過(guò)encode方法轉(zhuǎn)化為bytes
bytes通過(guò)decode方法轉(zhuǎn)化為str提示編碼方式與解碼方式必須一樣,否則將產(chǎn)生亂碼;默認(rèn)編碼方式為:utf-8數(shù)據(jù)寫入形式write()函數(shù)可以寫入字符串形式、也可以寫入二進(jìn)制形式,那么,在保存數(shù)據(jù)時(shí)到底該使用什么形式寫入呢?常用文件類型總結(jié):r.text:json文件、csv文件等文本型文件r.content:Excel文件(xlsx/xls)、圖片類文件(png/jpg)、視頻類文件(mp4)等提示爬取網(wǎng)頁(yè)后,可以根據(jù)響應(yīng)內(nèi)容的格式選擇文件類型,本課程文本類型僅涉及json、csv文件,二進(jìn)制類型僅涉及Excel文件。代碼#r.text寫入文件withopen('文件名稱','w',encoding='utf-8')asf:f.write(r.text)#r.content寫入文件withopen('文件名稱','wb')asf:f.write(r.content)r.text寫入文件代碼#r.text寫入文件,文件類型為csvwithopen('000001-zcfzb.csv','w',encoding='utf-8')asf:f.write(r.text)04自定義爬蟲函數(shù)tryexcept語(yǔ)句tryexcept語(yǔ)句:Python中異常處理語(yǔ)句,可以捕獲并處理異常。提示tryexcept語(yǔ)句用來(lái)檢測(cè)try語(yǔ)句中的錯(cuò)誤,從而讓except語(yǔ)句捕獲異常信息并處理;try語(yǔ)句先執(zhí)行,若發(fā)生異常情況,則執(zhí)行except語(yǔ)句。tryexcept語(yǔ)法:try:代碼塊
#可能產(chǎn)生異常的代碼except:
代碼塊
#異常處理代碼自定義爬蟲函數(shù)要求:根據(jù)requests庫(kù)相關(guān)內(nèi)容自定義爬蟲函數(shù)(僅考慮Excel、json、csv三種文件類型)。示例1代碼#自定義爬蟲函數(shù):url、filename均為字符串類型defspider_1(url,filename):try:
importrequests#引入庫(kù)r=requests.get(url,timeout=5)r.raise_for_status()r.encoding=r.apparent_encodingif(filename.endswith("xls")orfilename.endswith("xlsx")):withopen(filename,'wb')asf:f.write(r.content)else:withopen(filename,'w',encoding='utf-8')asf:f.write(r.text)returnprint('文件:',filename,'下載成功!')except:returnprint('下載失?。?)提示timeout:設(shè)定超時(shí)時(shí)間,以秒為單位,為防止服務(wù)器響應(yīng)緩慢,可以設(shè)置該參數(shù),若在指定時(shí)間內(nèi)沒有收到響應(yīng),則拋出異常;str.endswith():如果字符串以指定值結(jié)尾,則返回True,否則返回False;爬蟲練習(xí)要求:登錄“科云大數(shù)據(jù)中心”,使用自定義爬蟲函數(shù)爬取“自動(dòng)化設(shè)備”行業(yè)所有上市公司股票代碼及相關(guān)信息,并將爬取數(shù)據(jù)保存為json文件,文件名為“hy.json”。示例1代碼#調(diào)用爬蟲函數(shù)spider_1('/app/bigdata/2022/block/hy000700.json','hy.json')輸出結(jié)果:文件:hy.json下載成功!提示爬取數(shù)據(jù)保存至平臺(tái)【文件列表】,需要進(jìn)行數(shù)據(jù)分析時(shí),直接從相對(duì)路徑讀取文件??圃婆老x函數(shù)我們可以使用自定義的爬蟲函數(shù),也可以直接使用科云平臺(tái)內(nèi)置的爬蟲函數(shù)spider()。spider()函數(shù)語(yǔ)法:spider(url,filename)spider()函數(shù)參數(shù):url:str,需要爬取數(shù)據(jù)的網(wǎng)址;filename:str,爬取后保存的文件名。代碼#調(diào)用爬蟲函數(shù)spider('/app/bigdata/2022/block/hy000700.json','hy.json')課堂小結(jié)Requests庫(kù):發(fā)送網(wǎng)絡(luò)請(qǐng)求,返回響應(yīng)數(shù)據(jù)Requests.get():亂碼解決方法:r.encoding=r.apparent
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能家居行業(yè)發(fā)展現(xiàn)狀與前景展望
- 河北省秦皇島市昌黎縣第一中學(xué)2024-2025學(xué)年高三下學(xué)期一輪復(fù)習(xí)收官檢測(cè)生物學(xué)試卷(含答案)
- 教育行業(yè)應(yīng)急管理預(yù)案
- 科技產(chǎn)品創(chuàng)新統(tǒng)計(jì)表格
- 墩、臺(tái)身和蓋梁工程現(xiàn)場(chǎng)質(zhì)量檢驗(yàn)報(bào)告單(三)
- 家庭水處理知識(shí)培訓(xùn)課件
- 混凝土工勞務(wù)合同
- 公司文件收發(fā)流程表格
- 辦公樓租賃及物業(yè)維護(hù)協(xié)議
- 精密機(jī)械設(shè)備加工服務(wù)協(xié)議
- 日常采購(gòu)維修合同范本
- 企業(yè)員工職務(wù)犯罪預(yù)防
- (2025春新教材)部編版七年級(jí)語(yǔ)文下冊(cè)全冊(cè)教案
- 5《水污染》教學(xué)設(shè)計(jì)-2023-2024學(xué)年科學(xué)六年級(jí)下冊(cè)冀人版
- 2024 河北公務(wù)員考試(筆試、省直、A類、C類)4套真題及答案
- 統(tǒng)編版歷史 選擇性必修二第12課 《水陸交通的變遷》課件(共27張)
- 幼兒園開學(xué)教職工安全教育培訓(xùn)
- 2024年執(zhí)業(yè)藥師繼續(xù)教育專業(yè)答案
- 非ST段抬高型急性冠脈綜合征診斷和治療指南(2024)解讀
- VDA2供貨質(zhì)量保證培訓(xùn)PPT課件
- 折疊紙盒結(jié)構(gòu)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論