重拾python爬蟲之urllib的案例-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、成都做網(wǎng)站與策劃設(shè)計(jì),石屏網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:石屏等地區(qū)。石屏做網(wǎng)站價(jià)格咨詢:028-86922220

這篇文章主要介紹重拾python爬蟲之urllib的案例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

為網(wǎng)絡(luò)請(qǐng)求的方式有四種,按時(shí)間順序排:

第一種,urllib2 ,這個(gè)包是基于python2的,官方已經(jīng)對(duì)python2停止更新了并且不再免費(fèi),我覺(jué)得這個(gè)urllib2沒(méi)必要再學(xué)習(xí)和使用

第二種,urllib  這個(gè)是python的標(biāo)準(zhǔn)庫(kù),在python3里整合了python2的urllib和urllib2 ,有時(shí)間的可以學(xué)習(xí)一下。

第三種,urllib3,這個(gè)是第三方庫(kù),是對(duì)第二種方式urllib的升級(jí),做了很多改善,有時(shí)間可以學(xué)習(xí)一下。

第四種,也是很流行的requests,各種請(qǐng)求的方法非常的優(yōu)雅和人性化,其底層是urllib3,簡(jiǎn)化headers、proxy、cookie等的操作。這個(gè)重點(diǎn)學(xué)習(xí)。

作為一個(gè)爬蟲工程師,如果你連urllib一點(diǎn)不會(huì)就說(shuō)不過(guò)去了。雖然不常用,但是學(xué)習(xí)它,有它的歷史意義,對(duì)爬蟲的整個(gè)架構(gòu)有一個(gè)更透徹的了解。

一、簡(jiǎn)介

urllib是Python中請(qǐng)求url連接的官方標(biāo)準(zhǔn)庫(kù),在Python2中主要為urllib和urllib2,在Python3中整合成了urllib?;旧虾w了基礎(chǔ)的網(wǎng)絡(luò)請(qǐng)求功能。

該庫(kù)有四個(gè)模塊,分別是urllib.request,urllib.error,urllib.parse,urllib.robotparser。前三個(gè)比較常用。

urllib.request 發(fā)送http請(qǐng)求

urllib.error 處理請(qǐng)求過(guò)程中,出現(xiàn)的異常。

urllib.parse 解析url

urllib.robotparser 解析robots.txt 文件

二、請(qǐng)求方式

1、get請(qǐng)求

#第一步導(dǎo)包
from  urllib import request

url = "http://httpbin.org"
#第二步請(qǐng)求
response = request.urlopen(url,timeout=1)
#第三步打印返回?cái)?shù)據(jù)
print(response.read().decode())

訪問(wèn)的結(jié)果會(huì)是一個(gè)http.client.HTTPResponse對(duì)象,使用此對(duì)象的read()方法,則可以獲取訪問(wèn)網(wǎng)頁(yè)獲得的數(shù)據(jù)。但是要注意的是,獲得的數(shù)據(jù)會(huì)是bytes的二進(jìn)制格式,所以需要decode()一下,轉(zhuǎn)換成字符串格式。

urllib發(fā)送請(qǐng)求是用urlopen()

源碼如下

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

第一個(gè)參數(shù) String 類型的地址

data 是 bytes 類型的內(nèi)容,可通過(guò) bytes()函數(shù)或者encode()轉(zhuǎn)為化字節(jié)流。它也是可選參數(shù)。使用 data 參數(shù),請(qǐng)求方式變成以 POST 方式提交表單。使用標(biāo)準(zhǔn)格式是application/x-www-form-urlencoded

timeout 參數(shù)是用于設(shè)置請(qǐng)求超時(shí)時(shí)間。單位是秒。

cafile和capath代表 CA 證書和 CA 證書的路徑。如果使用HTTPS則需要用到。

context參數(shù)必須是ssl.SSLContext類型,用來(lái)指定SSL設(shè)置

cadefault參數(shù)已經(jīng)被棄用,可以不用管了。

該方法也可以單獨(dú)傳入urllib.request.Request對(duì)象

該函數(shù)返回結(jié)果是一個(gè)http.client.HTTPResponse對(duì)象。

http.client.HTTPResponse對(duì)象。它具有msg、version、status、reason、debuglevel、closed等屬性以及read()、readinto()、getheader(name)、getheaders()、fileno()等函數(shù)。

# print(response.msg) # OK
# print(response.version)  #11
# print(response.status) #200
# print(response.reason) #OK
# print(response.getcode()) #200
# print(response.getheaders) # <bound method HTTPResponse.getheaders of <http.client.HTTPResponse 
object at 0x0000023C554DB588>>
# print(response.geturl()) #http://httpbin.org/headers

2、post請(qǐng)求

from  urllib import request,parse

url = "http://httpbin.org"data = {    'name':'xfy'}# data = bytes(parse.urlencode(data),encoding='utf8');
data = parse.urlencode(data).encode()
response = request.urlopen(url+"/post",data=data)
print(response.status) #200print(response.read().decode())

data 需要被轉(zhuǎn)碼成字節(jié)流。而data 是一個(gè)字典。我們需要使用 parse.urlencode() 將字典轉(zhuǎn)化為字符串。再使用 bytes()或者encode() 轉(zhuǎn)為字節(jié)流。最后使用 urlopen() 發(fā)起請(qǐng)求,請(qǐng)求是模擬用 POST 方式提交表單數(shù)據(jù)。

這里說(shuō)一下http://httpbin.org,這個(gè)url專門是用來(lái)爬蟲請(qǐng)求測(cè)試的。

http://httpbin.org/get   測(cè)試get請(qǐng)求
http://httpbin.org/post  測(cè)試post請(qǐng)求
http://httpbin.org/headers  測(cè)試獲得headers  
http://httpbin.org/ip  測(cè)試獲得ip
http://httpbin.org/cookies  測(cè)試獲得cookies

三、創(chuàng)建 Request 對(duì)象

urlopen()還可以傳一個(gè)Request對(duì)象

req = request.Request(url+"/get")
response = request.urlopen(req)
print(response.read().decode())

urllib/request 包下有一個(gè)類Request

其初始化方法如下

def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):

url 參數(shù)是請(qǐng)求鏈接,這個(gè)是必傳參數(shù),其他的都是可選參數(shù)。

data 參數(shù)跟 urlopen() 中的 data 參數(shù)用法相同。

headers 參數(shù)是指定發(fā)起的 HTTP 請(qǐng)求的頭部信息。headers 是一個(gè)字典。它除了在 Request 中添加,還可以通過(guò)調(diào)用 Reques t實(shí)例的 add_header() 方法來(lái)添加請(qǐng)求頭。

origin_req_host 參數(shù)指的是請(qǐng)求方的 host 名稱或者 IP 地址。

unverifiable 參數(shù)表示這個(gè)請(qǐng)求是否是無(wú)法驗(yàn)證的,默認(rèn)值是False。意思就是說(shuō)用戶沒(méi)有足夠權(quán)限來(lái)選擇接收這個(gè)請(qǐng)求的結(jié)果。例如我們請(qǐng)求一個(gè)HTML文檔中的圖片,但是我們沒(méi)有自動(dòng)抓取圖像的權(quán)限,我們就要將 unverifiable 的值設(shè)置成 True。

method 參數(shù)指的是發(fā)起的 HTTP 請(qǐng)求的方式,有 GET、POST、DELETE、PUT等

以上是重拾python爬蟲之urllib的案例的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

新聞標(biāo)題:重拾python爬蟲之urllib的案例-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)于:http://muchs.cn/article32/dhgisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站、品牌網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)