午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁技術(shù)文章
文章詳情頁

python爬蟲基礎(chǔ)之urllib的使用

瀏覽:26日期:2022-06-30 16:41:55
一、urllib 和 urllib2的關(guān)系

在python2中,主要使用urllib和urllib2,而python3對urllib和urllib2進(jìn)行了重構(gòu),拆分成了urllib.request, urllib.parse, urllib.error,urllib.robotparser等幾個(gè)子模塊,這樣的架構(gòu)從邏輯和結(jié)構(gòu)上說更加合理。urllib庫無需安裝,python3自帶。python 3.x中將urllib庫和urilib2庫合并成了urllib庫。

urllib2.urlopen() 變成了 urllib.request.urlopen() urllib2.Request() 變成了 urllib.request.Request() python2中的 cookielib 改為 http.cookiejar. import http.cookiejar 代替 import cookielib urljoin 現(xiàn)在對應(yīng)的函數(shù)是 urllib.parse.urljoin

二、python3下的urllib庫 request,它是最基本的 HTTP 請求模塊,我們可以用它來模擬發(fā)送一請求,只需要給庫方法傳入 URL 還有額外的參數(shù),就可以模擬實(shí)現(xiàn)這個(gè)過程了。 error ,即異常處理模塊,如果出現(xiàn)請求錯(cuò)誤,我們可以捕獲這些異常,然后進(jìn)行重試或其他操作保證程序不會意外終止。 parse ,是一個(gè)工具模塊,提供了許多 URL 處理方法,比如拆分、解析、合并等等的方法。 robotparser,主要是用來識別網(wǎng)站的 robots.txt 文件,然后判斷哪些網(wǎng)站可以爬,哪些網(wǎng)站不可以爬的,其實(shí)用的比較少。三、request的基礎(chǔ)類(一)request.urlopen

urlopen方法最主要的參數(shù)就是目標(biāo)網(wǎng)站的url地址,可以使str類型,也可以是一個(gè)request對象。

get方法請求如下:

from urllib import request,parserespones = request.urlopen(http://www.baidu.com/)

post方法請求,需要添加data參數(shù)(字典格式),它要是字節(jié)流編碼格式的內(nèi)容,即 bytes 類型,通過 bytes() 方法可以進(jìn)行轉(zhuǎn)化,另外如果傳遞了這個(gè) data 參數(shù),不添加data參數(shù)就默認(rèn)為 GET 方式請求。

from urllib import request,parseurl = 'http://www.baidu.com/'wd = {’wd’:’哇哈哈哈’}data = bytes(parse.urlencode(wd),’utf-8’)respones = request.urlopen(url,data=data)(二)request.Request

由于單獨(dú)使用urlopen() 方法的不能添加User-Agent、Cookie等headers信息,需要構(gòu)建一個(gè) Request 類型的對象,通過構(gòu)造這個(gè)這個(gè)數(shù)據(jù)結(jié)構(gòu),一方面我們可以將請求獨(dú)立成一個(gè)對象,另一方面可配置參數(shù)更加豐富和靈活。主要參數(shù)有:

url 參數(shù)是請求 URL,這個(gè)是必傳參數(shù),其他的都是可選參數(shù)。 data 參數(shù)如果要傳必須傳 bytes(字節(jié)流)類型的,如果是一個(gè)字典,可以先用 urllib.parse 模塊里的 urlencode() 編碼。 headers 參數(shù)是一個(gè)字典,這個(gè)就是 Request Headers 了,你可以在構(gòu)造 Request 時(shí)通過 headers 參數(shù)直接構(gòu)造,也可以通過調(diào)用 Request 實(shí)例的 add_header() 方法來添加, Request Headers 最常用的用法就是通過修改 User-Agent 來偽裝瀏覽器,默認(rèn)的 User-Agent 是 Python-urllib,我們可以通過修改它來偽裝瀏覽器。 origin_req_host 參數(shù)指的是請求方的 host 名稱或者 IP 地址。 unverifiable 參數(shù)指的是這個(gè)請求是否是無法驗(yàn)證的,默認(rèn)是False。意思就是說用戶沒有足夠權(quán)限來選擇接收這個(gè)請求的結(jié)果。例如我們請求一個(gè) HTML 文檔中的圖片,但是我們沒有自動抓取圖像的權(quán)限,這時(shí) unverifiable 的值就是 True。 method 參數(shù)是一個(gè)字符串,它用來指示請求使用的方法,比如GET,POST,PUT等等。 通過隨機(jī)的方法,選擇user-agent:

import randomUA_LIST = [ ’Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)’, ’Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)’, ’Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)’, ’Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)’, ’Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; Acoo Browser; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; Avant Browser)’, ’Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)’, ’Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)’, ’Mozilla/4.0 (compatible; Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729); Windows NT 5.1; Trident/4.0)’, ’Mozilla/4.0 (compatible; Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Acoo Browser; .NET CLR 1.1.4322; .NET CLR 2.0.50727); Windows NT 5.1; Trident/4.0; Maxthon; .NET CLR 2.0.50727; .NET CLR 1.1.4322; InfoPath.2)’, ’Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)’]#隨機(jī)獲取一個(gè)user-agentuser_agent = random.choice(UA_LIST)添加headers頭部信息的方法1:

url=’http://www.baidu.com/’user_agent = random.choice(UA_LIST)headers = { ’User-Agent’: user_agent}req = request.Request(url=url,headers=headers)respones = request.urlopen(req)添加headers頭部信息的方法2:

url=’http://www.baidu.com’headers = { ’User-Agent’: user_agent}#添加user-agent的方法2req = request.Request(url)#請求添加user-agentreq.add_header('User-Agent',user_agent)#獲取請求的user-agent agent的a要小寫print(req.get_header('User-agent'))response = request.urlopen(req)print(respones.read().decode(’utf-8’))三、request的高級類

在urllib.request模塊里的BaseHandler類,他是所有其他Handler的父類,他是一個(gè)處理器,比如用它來處理登錄驗(yàn)證,處理cookies,代理設(shè)置,重定向等。它提供了直接使用和派生類使用的方法:

add_parent(director):添加director作為父類 close():關(guān)閉它的父類 parent():打開使用不同的協(xié)議或處理錯(cuò)誤 defautl_open(req):捕獲所有的URL及子類,在協(xié)議打開之前調(diào)用 Handler的子類包括:

HTTPDefaultErrorHandler:用來處理http響應(yīng)錯(cuò)誤,錯(cuò)誤會拋出HTTPError類的異常HTTPRedirectHandler:用于處理重定向HTTPCookieProcessor:用于處理cookiesProxyHandler:用于設(shè)置代理,默認(rèn)代理為空HTTPPasswordMgr:永遠(yuǎn)管理密碼,它維護(hù)用戶名和密碼表HTTPBasicAuthHandler:用戶管理認(rèn)證,如果一個(gè)鏈接打開時(shí)需要認(rèn)證,可以使用它來實(shí)現(xiàn)驗(yàn)證功能

(一)ProxyHandler

如果爬蟲需要大量爬取網(wǎng)站數(shù)據(jù),為了避免被封號,需要使用代理,通過request.build_opener()方法生成一個(gè)opener對象,添加代理的方法如下:

from urllib import request#代理開關(guān),表示是否開啟代理proxyswitch =True#構(gòu)建一個(gè)handler處理器對象,參數(shù)是一個(gè)字典類型,包括代理類型和代理服務(wù)器IP+PORTproxyhandler = request.ProxyHandler({'http':'191.96.42.80:3128'})#如果是帶用戶名和密碼的代理,格式為{'http':'username:passwd@191.96.42.80:3128'}#不加代理的handler處理器對象nullproxyhandler = request.ProxyHandler()if proxyswitch: opener = request.build_opener(proxyhandler)else: opener = request.build_opener(nullproxyhandler)req = request.Request('http://www.baidu.com/')response = opener.open(req)print(response.read().decode('utf-8'))(二)ProxyBasicAuthHandler

通過密碼管理器的方法實(shí)現(xiàn)代理服務(wù)器功能

from urllib import request#代理密碼管理,也可以管理服務(wù)器賬戶密碼#賬戶密碼user = 'username'passwd = 'passwd'#代理服務(wù)器proxyserver = '1.1.1.1:9999'#構(gòu)建密碼管理對象,保存需要處理的用戶名和密碼passmgr = request.HTTPPasswordMgrWithDefaultRealm()#添加賬戶信息,第一個(gè)參數(shù)realm是與遠(yuǎn)程服務(wù)器相關(guān)的域信息passmgr.add_password(None,proxyserver,user,passwd)#構(gòu)建基礎(chǔ)ProxyBasicAuthHandler處理器對象proxyauth_handler = request.ProxyBasicAuthHandler(passmgr)opener = request.build_opener(proxyauth_handler)req = request.Request('http://www.baidu.com/')response = opener.open(req)(三)ProxyBasicAuthHandler

通過密碼管理器的方法實(shí)現(xiàn)web認(rèn)證登陸功能

#web驗(yàn)證from urllib import requesttest = 'test'passwd = '123456'webserver = '1.1.1.1'#構(gòu)建密碼管理器handlerpasswdmgr = request.HTTPPasswordMgrWithDefaultRealm()#添加密碼信息passwdmgr.add_password(None,webserver,test,passwd)#HTTP基礎(chǔ)驗(yàn)證處理器類http_authhandler = request.HTTPBasicAuthHandler(passwdmgr)opener = request.build_opener(http_authhandler)req = request.Request('http://'+webserver)response = opener.open(req)四、Cookie處理

通過http.cookiejar中的HTTPCookieProcessor構(gòu)建cookie處理器對象,處理cookie信息

import http.cookiejarfrom urllib import request,parse#模擬登陸先post賬戶密碼#然后保存生成的cookie#通過CookieJar類構(gòu)件一個(gè)coociejar對象,從來保存cookie值cookie = http.cookiejar.CookieJar()#構(gòu)件cookie處理器對象,用來處理cookiecookie_handler = request.HTTPCookieProcessor(cookie)#構(gòu)件一個(gè)自定義的openeropener = request.build_opener(cookie_handler)#通過自定義的opener的addheaders參數(shù),可以添加HTTP報(bào)頭參數(shù)opener.addheaders = [('User-Agent','Mozilla/5.0 (compatible; U; ABrowse 0.6; Syllable) AppleWebKit/420+ (KHTML, like Gecko)'),]#需要登陸的接口url = ’http://www.renren.com/PLogin.do’#需要登陸的賬戶密碼data = { 'email':'renren賬號', 'password':'密碼'}#數(shù)據(jù)處理data = bytes(parse.urlencode(data),’utf-8’)#第一次是POST請求,通過登陸賬戶密碼,得到cookiereq = request.Request(url,data=data)#發(fā)送第一次POST請求,生成登陸后的cookieresponse = opener.open(req)print(response.read().decode('utf-8'))#此時(shí)的opener已經(jīng)包含了該鏈接下的cookie,此時(shí)使用該opener就可以直接訪問該站點(diǎn)下其他的網(wǎng)頁而不需要再登陸了opener.open(http://www.renren.com/PLogin.doxxxxxxxxxxxxx)

以上就是python爬蟲基礎(chǔ)之urllib的使用的詳細(xì)內(nèi)容,更多關(guān)于python 爬蟲urllib的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 久久在线免费视频 | 成人免费看片在线观看 | av资源免费 | 午夜看看 | 色视频导航 | 超碰中文字幕在线 | 国产美女久久久久久 | www日韩av| 天天色播 | 色玖玖 | 国产小视频免费观看 | 91精品99| 麻豆一区二区99久久久久 | 午夜视频黄色 | 色哺乳xxxxhd奶水米仓惠香 | 天堂网视频在线观看 | 欧美日韩在线综合 | 99精品免费观看 | 欧美一级精品 | 欧美一级网站 | 日韩av一级片| 国产精品视频在线免费观看 | 欧美性a视频 | 91国产精品| 国产精品久久久久蜜臀 | 网址黄色| 五月婷婷一区 | 日本黄色大片免费看 | 撸大师在线观看 | 丁香综合激情 | 亚洲无打码 | 日韩中文字幕高清 | 成人免费播放视频 | 午夜在线观看影院 | 精品一区二区三区在线观看视频 | 五月天婷婷综合 | 免费黄色小视频网站 | 国内精品视频在线播放 | 亚洲天堂视频网站 | 欧美激情在线观看视频 | 欧美福利一区 |