《數(shù)據(jù)采集技術(shù)》課件-使用 urllib 爬取網(wǎng)頁_第1頁
《數(shù)據(jù)采集技術(shù)》課件-使用 urllib 爬取網(wǎng)頁_第2頁
《數(shù)據(jù)采集技術(shù)》課件-使用 urllib 爬取網(wǎng)頁_第3頁
《數(shù)據(jù)采集技術(shù)》課件-使用 urllib 爬取網(wǎng)頁_第4頁
《數(shù)據(jù)采集技術(shù)》課件-使用 urllib 爬取網(wǎng)頁_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

使用urllib實(shí)現(xiàn)數(shù)據(jù)傳輸Contents素養(yǎng)目標(biāo)培養(yǎng)良好的信息素養(yǎng)和道德意識(shí)技能目標(biāo)熟悉使用urllib庫爬取網(wǎng)頁知識(shí)目標(biāo)掌握urllib庫中包含模塊的定義什么是urllib庫用于處理URL(UniformResourceLocator)相關(guān)的操作。urllib是Python標(biāo)準(zhǔn)庫中的一個(gè)模塊提供一系列函數(shù)和類方便在Python程序進(jìn)行操作URL請(qǐng)求數(shù)據(jù)獲取參數(shù)編碼通過urllib庫,開發(fā)人員可以實(shí)現(xiàn):獲取數(shù)據(jù)發(fā)送HTTP請(qǐng)求處理URL網(wǎng)站什么是urllib庫模塊功能urllib.requestHTTP請(qǐng)求模塊,用于模擬瀏覽器發(fā)起網(wǎng)絡(luò)請(qǐng)求。urllib.parse解析模塊,用于解析URL。urllib.error異常處理模塊,用于處理request引起的異常。urllib.robotparser用于解析robots.txt文件,應(yīng)用較少。urllib包含4個(gè)模塊:urllib庫用于操作:urllib.request模塊發(fā)送HTTP請(qǐng)求獲取遠(yuǎn)程數(shù)據(jù)處理URLurllib庫用于解析和操作URL,提供了一組函數(shù):urllib.parse模塊完整的URL各個(gè)組成部分拆分為合并為urllib庫用于處理與urllib請(qǐng)求和打開URL相關(guān)的錯(cuò)誤。urllib.error模塊提供一些異常類捕獲和處理urllib過程中可能出現(xiàn)的異常情況urllib庫用于解析和分析robots.txt文件。urllib.robotparser哪些頁面可以訪問,哪些頁面需要排除訪問。指示網(wǎng)絡(luò)爬蟲urllib庫提供了一個(gè)RobotFileParser類。urllib.robotparser用于解析robots.txt文件并提供方法來判斷一個(gè)URL是否允許被爬取。快速使用urllib爬取網(wǎng)頁#引入urllib.request庫importurllib.request#調(diào)用urllib.request庫的urlopen方法,并傳入一個(gè)urlresponse=urllib.request.urlopen('')#使用read方法讀取獲取到的網(wǎng)頁內(nèi)容html=response.read().decode('UTF-8')#打印網(wǎng)頁內(nèi)容print(html)示例使用urllib快速爬取百度網(wǎng)頁快速使用urllib爬取網(wǎng)頁示例結(jié)果如果在瀏覽器上打開百度主頁,右鍵選擇“查看源代碼”,會(huì)發(fā)現(xiàn)打印出來的是一樣的。僅僅用了幾行代碼,就已經(jīng)把百度的首頁的全部代碼下載下來??焖偈褂胾rllib爬取網(wǎng)頁代碼調(diào)用urllib.request模塊中的urlopen方法,傳入一個(gè)百度首頁的URL,使用的HTTP協(xié)議。爬取網(wǎng)頁有一句核心的爬蟲代碼:response=urllib.request.urlopen('')快速使用urllib爬取網(wǎng)頁urlopen方法可以接收多個(gè)參數(shù),定義格式如下:urllib.request.urlopen(url,

data=None,

[timeout,

]*,

cafile=None,

capath=None,

cadefault=False,

context=None)參數(shù)如下:表示目標(biāo)資源在網(wǎng)站中的位置。url用來指明向服務(wù)器發(fā)送請(qǐng)求的額外信息。data該參數(shù)用于設(shè)置超時(shí)時(shí)間,單位是秒。timeout實(shí)現(xiàn)SSL加密傳輸,該參數(shù)很少使用。context快速使用urllib爬取網(wǎng)頁HTTP參數(shù)詳細(xì)介紹:dataHTTP協(xié)議是Python支持的眾多網(wǎng)站通信協(xié)議中唯一使用data參數(shù)的。只有打開http網(wǎng)址才有作用data參數(shù)data必須是一個(gè)bytes對(duì)象。必須使用urllib.parse.urlencode()自定義的data標(biāo)準(zhǔn)格式轉(zhuǎn)換為能接收的參數(shù)類型是Python中的mapping類型(鍵值對(duì),比如dict)或者是只包含兩個(gè)元素的元組類型??焖偈褂胾rllib爬取網(wǎng)頁HTTP參數(shù)詳細(xì)介紹:只有打開http網(wǎng)址才有作用data參數(shù)data必須是一個(gè)bytes對(duì)象。當(dāng)用戶設(shè)置data參數(shù)時(shí),需要將發(fā)送請(qǐng)求的方式改為POST。默認(rèn)為NoneData以GET方式發(fā)送請(qǐng)求dataHTTP協(xié)議是Python支持的眾多網(wǎng)站通信協(xié)議中唯一使用data參數(shù)的??焖偈褂胾rllib爬取網(wǎng)頁data參數(shù)的使用:importurllib.parsedata=bytes(urllib.parse.urlencode({'world':'hello'}).encode('utf-8'))response=urllib.request.urlopen('/post',data=data)html=response.read().decode('utf-8')print(html)需要被轉(zhuǎn)碼成bytes類型轉(zhuǎn)字節(jié)流方法urllib.parse.urlencode()方法bytes()方法第二個(gè)參數(shù)指定編碼格式。執(zhí)行后,通過觀察返回的響應(yīng)頭里的Content-Type字段的值可以知道使用的是POST請(qǐng)求方法。bytes()方法第一個(gè)參數(shù)是字符串類型將參數(shù)轉(zhuǎn)換為字符串快速使用urllib爬取網(wǎng)頁response=urllib.request.urlopen('/get',timeout=2)html=response.read().decode('utf-8')print(html)等待時(shí)間最多為2秒timeout參數(shù)的使用:快速使用urllib爬取網(wǎng)頁使用urlopen方法發(fā)送HTTP請(qǐng)求后,服務(wù)器返回的響應(yīng)內(nèi)容封裝在一個(gè)HTTPResponse類型的對(duì)象中。importurllib.requestresponse=urllib.request.urlopen('')print(type(response))例如<class'http.client.HTTPResponse'>快速使用urllib爬取網(wǎng)頁方法:read()、readinto()、getheader(name)、getheaders()、fileno()屬性:msg、version、status、reason、bebuglevel、closed使用urllib.request.urlopen()方法示例代碼如下:importurllib.request

response=urllib.request.urlopen('https://www.P')#請(qǐng)求站點(diǎn)獲得一個(gè)HTTPResponse對(duì)象print(response.read().decode('utf-8'))#返回網(wǎng)頁內(nèi)容print(response.getheader('server'))#返回響應(yīng)頭中的server值print(response.getheaders())#以列表元祖對(duì)的形式返回響應(yīng)頭信息print(response.version)#返回版本信息print(response.status)#返回狀態(tài)碼200,404代表網(wǎng)頁未找到print(response.debuglevel)#返回調(diào)試等級(jí)print(response.closed)#返回對(duì)象是否關(guān)閉布爾值print(response.geturl())#返回檢索的URLprint(())#返回網(wǎng)頁的頭信息print(response.getcode())#返回響應(yīng)的HTTP狀態(tài)碼print(response.msg)#訪問成功則返回okprint(response.reason)#返回狀態(tài)信息urllib.request.urlopen()返回請(qǐng)求對(duì)象構(gòu)造Request對(duì)象#將url作為Request方法的參數(shù),構(gòu)造并返回一個(gè)Request對(duì)象。request=urllib.request.Request('')#將Request對(duì)象作為urlopen方法的參數(shù),發(fā)送給服務(wù)器并接收響應(yīng)。response=urllib.request.urlopen(request)使用urllib庫發(fā)送URL時(shí),推薦使用構(gòu)造Request對(duì)象的方式。如果希望對(duì)請(qǐng)求執(zhí)行復(fù)雜操作,則需要?jiǎng)?chuàng)建一個(gè)Request對(duì)象來作為urlopen方法的參數(shù)。例如構(gòu)造Request對(duì)象urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)請(qǐng)求的URL,必須傳遞的參數(shù),其他都是可選參數(shù)。url上傳的數(shù)據(jù),必須傳bytes字節(jié)流類型的數(shù)據(jù),如果它是字典,可以先用urllib.parse模塊里的urlencode()編碼。dataurllib.request.Requset()語法格式構(gòu)造Request對(duì)象urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)urllib.request.Requset()語法格式它是一個(gè)字典,傳遞的是請(qǐng)求頭數(shù)據(jù),可以通過它構(gòu)造請(qǐng)求頭,也可以通過調(diào)用請(qǐng)求實(shí)例的方法add_header()來添加。headers例如:修改User_Agent頭的值來偽裝瀏覽器{'User-Agent':'Mozilla/5.0(compatible;MSIE5.5;WindowsNT)'}比如火狐瀏覽器設(shè)置:構(gòu)造Request對(duì)象urllib.request.Request(url,data=None,headers={},origin_req_host=None,unverifiable=False,method=None)urllib.request.Requset()語法格式指請(qǐng)求方的host名稱或者IP地址。origin_req_host表示這個(gè)請(qǐng)求是否是無法驗(yàn)證的,默認(rèn)為False,如請(qǐng)求一張圖片如果沒有權(quán)限獲取圖片那它的值就是true。unverifiable是一個(gè)字符串,用來指示請(qǐng)求使用的方法,如:GET,POST,PUT等。method構(gòu)造Request對(duì)象importurllib.requestimporturllib.parseurl='/post'headers={'User-Agent':'Mozilla/5.0(compatible;MSIE5.5;WindowsNT)','Host':''}#定義頭信息dict={'name':'germey'}data=bytes(parse.urlencode(dict),encoding='utf-8')req=request.Request(url=url,data=data,headers=headers,method='POST')response=request.urlopen(req)print(response.re

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論