Python3 urllib常用操作

urllib庫

python內(nèi)置的HTTP請求庫

四個模塊:request,parse,error,rebotparser

一逗物。request模塊

請求對象組成:url逐纬,參數(shù),請求頭雁刷,請求體四部分德崭。

response = urllib.request.urlopen(url,data=None,timeout,..)

response = urllib.request.urlopen(Request對象)

Request對象

urllib.request.Request(url,data,headers,method)

data是作為請求體進行傳遞的

data = bytes(utllib.parse.urlencode(map),'utf-8')

headers的一些屬性:

User-Agent : 有些服務器或 Proxy 會通過該值來判斷是否是瀏覽器發(fā)出的請求

Referer:有的服務器會識別headers中的referer是不是自己

Content-Type : 在使用 REST 接口時荔睹,服務器會檢查該值,用來確定 HTTP Body 中的內(nèi)容該怎樣解析项阴。

application/xml : 在 XML RPC滑黔,如 RESTful/SOAP 調(diào)用時使用

application/json : 在 JSON RPC 調(diào)用時使用

application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用在使用服務器提供的 RESTful 或 SOAP 服務時, Content-Type 設置錯誤會導致服務器拒絕服務

例如

headers={

    'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',

    'Referer':'http://www.zhihu.com/articles'

}

response對象

響應對象組成:狀態(tài)碼,響應頭略荡,響應主體

狀態(tài)碼庵佣,響應頭,響應主體

response.status

response.getheaders() ? ?/ ? response.getheaders("server")

response.read().decode('utf-8') ? ?# 如果不加decode撞芍,則返回的是bytes類型的流

二秧了。parse模塊(URL解析和URL引用)

1.URL解析:urlparse將url解析成各個組件和urlunparse將組件拼裝成url

urlparse

urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True)

# scheme指定協(xié)議類型,如果url中已經(jīng)存在序无,則scheme不起作用

#allow_fragments為false時验毡,fragment將為空,#后的內(nèi)容將前移至path中帝嗡,如果path之后的參數(shù)全為空

#URL組成

URL:scheme://netloc/path;parameters?query#fragment

urljoin

將前后兩個url進行拼接晶通,每個url分成6個部分倦蚪,后面那個參數(shù)會被分割后會填充前面那個參數(shù)中分割后不存在的那個部分黔衡,雙方都有的話檩电,將以前者為準

urljoin('http://www.cwi.nl/%7Eguido/Python.html','FAQ.html')

>>>'http://www.cwi.nl/%7Eguido/FAQ.html'

urlencode

將字典轉為query的形式

from urllib.parse import urlencode

params = {

? ? 'name' :'tim',

? ? 'age' :23

}

print(urlencode(params))

>>> name='tim'&age=23

urlunparse

將url的6個部分拼接成url

data = {'','',...}

三叁丧。error模塊

由request產(chǎn)生僚害。主要存在兩個類:URLError风纠,HTTPError(繼承URLError)

URLError屬性:reason

HTTPError屬性:code亚隙,reason宾抓,headers

四抑月。rebotparser模塊

用來解析robots.txt文件树叽,不常用。

五谦絮。高級用法

1. Opener

當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)题诵。在前面,我們都是使用的默認的opener层皱,也就是urlopen性锭。它是一個特殊的opener,可以理解成opener的一個特殊實例叫胖,傳入的參數(shù)僅僅是url草冈,data,timeout瓮增。

如果我們需要用到Cookie或者Proxy疲陕,只用這個opener是不能達到目的的,所以我們需要創(chuàng)建更一般的opener來實現(xiàn)對Cookie和Proxy的設置钉赁。

2. proxy代理

import urllib.request

proxy_handler = ProxyHandler({'http':'http://127.0.0.1:9999',...})

opener = build_opener(proxy_handler)

response = opener.open('http://..')

3. Cookielib

主要用來提供可存儲的cookie對象蹄殃。可以利用本模塊的CookieJar類的對象來捕獲cookie并在后續(xù)連接請求時重新發(fā)送你踩∽缪遥可以通過F12->Application->Cookies中查看

CookieJar —-派生—->FileCookieJar? —-派生—–>MozillaCookieJar和LWPCookieJar

import http.cookiejar

#聲明一個CookieJar對象實例來保存cookie

cookie = http.cookiejar,CookieJar()


#利用urllib庫request模塊的HTTPCookieProcessor對象來創(chuàng)建cookie處理器

handler=urllib.request.HTTPCookieProcessor(cookie)

#通過handler來構建opener

opener=urllib.request.build_opener(handler)

#此處的open方法同urllib2的urlopen方法讳苦,也可以傳入request

response=opener.open('http://www.baidu.com')

for item in cookie:

? ? print'Name = '+item.name

? ? print'Value = '+item.value

使用MozillaCookieJar和LWPCookieJar可以將cookie保存到文件中,使用save來存儲吩谦,使用load來加載鸳谜。

#設置保存cookie的文件,同級目錄下的cookie.txt

filename='cookie.txt'

#聲明一個MozillaCookieJar對象實例來保存cookie式廷,之后寫入文件

cookie=http.cookiejar.MozillaCookieJar(filename)

#利用urllib2庫的HTTPCookieProcessor對象來創(chuàng)建cookie處理器

handler=urllib2.request.HTTPCookieProcessor(cookie)

#通過handler來構建opener

opener=urllib.request.build_opener(handler)

#創(chuàng)建一個請求咐扭,原理同urllib2的urlopen

response=opener.open("http://www.baidu.com")

#保存cookie到文件

cookie.save(ignore_discard=True,ignore_expires=True)

使用load來加載cookie文件到cookie

cookie = http.cookiejar.MozillaCookieJar()

cookie.load(filename,ignore_discard=True,ignore_expires=True)

handler=urllib2.request.HTTPCookieProcessor(cookie)

#通過handler來構建opener

opener=urllib.request.build_opener(handler)

#創(chuàng)建一個請求,原理同urllib2的urlopen

response=opener.open("http://www.baidu.com")




最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滑废,一起剝皮案震驚了整個濱河市蝗肪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蠕趁,老刑警劉巖薛闪,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俺陋,居然都是意外死亡豁延,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門腊状,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诱咏,“玉大人,你說我怎么就攤上這事缴挖∫人眨” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵醇疼,是天一觀的道長。 經(jīng)常有香客問我法焰,道長秧荆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任埃仪,我火速辦了婚禮乙濒,結果婚禮上,老公的妹妹穿的比我還像新娘卵蛉。我一直安慰自己颁股,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布傻丝。 她就那樣靜靜地躺著甘有,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葡缰。 梳的紋絲不亂的頭發(fā)上亏掀,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天忱反,我揣著相機與錄音,去河邊找鬼滤愕。 笑死温算,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的间影。 我是一名探鬼主播注竿,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魂贬!你這毒婦竟也來了巩割?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤随橘,失蹤者是張志新(化名)和其女友劉穎喂分,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體机蔗,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蒲祈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了萝嘁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梆掸。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牙言,靈堂內(nèi)的尸體忽然破棺而出酸钦,到底是詐尸還是另有隱情,我是刑警寧澤咱枉,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布卑硫,位于F島的核電站,受9級特大地震影響蚕断,放射性物質發(fā)生泄漏欢伏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一亿乳、第九天 我趴在偏房一處隱蔽的房頂上張望硝拧。 院中可真熱鬧,春花似錦葛假、人聲如沸障陶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抱究。三九已至,卻和暖如春带斑,著一層夾襖步出監(jiān)牢的瞬間媳维,已是汗流浹背酿雪。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侄刽,地道東北人指黎。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像州丹,于是被迫代替她去往敵國和親醋安。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Python爬蟲入門(urllib+Beautifulsoup) 本文包括:1墓毒、爬蟲簡單介紹2吓揪、爬蟲架構三大模塊3...
    廖少少閱讀 9,793評論 0 6
  • urllib2是Python的一個獲取URLs的組件。他以urlopen函數(shù)的形式提供了一個非常簡單的接口所计,具有利...
    查無此人asdasd閱讀 1,494評論 0 3
  • get請求 urllib.request.urlopen最簡單的方式 使用Request的方式 自己創(chuàng)建build...
    xiaoxiaoyu_5be6閱讀 1,022評論 0 2
  • 一柠辞、概述 urllib2是Python的一個針對URLs的庫。他以urlopen函數(shù)的形式提供了一個非常簡單的...
    MiracleJQ閱讀 1,482評論 0 5
  • 一年又一年主胧,我走過了無數(shù)個春夏秋冬叭首。感覺滄桑了不少,其實只有自己知道一直都在原地踪栋。 以前沒弄明白的事現(xiàn)在依然沒弄明...
    QY_清遠閱讀 355評論 0 0