python知識撿拾 URL及urllib篇

2021-10-01 08:45:05 字數 4181 閱讀 8488

python中用urlparse來對url字元進行解析

urlparse方法由兩個可選的引數:default_scheme和allow_fragments

default_scheme主要用來為不包含協議部分的url指定預設協議,此引數預設值為空字串

allow_fragments則用來指示是否可以對位址進行分片,此引數預設值為"true"

例項:

import urlparse

)print r2

url的拼合:

當提供了url中的絕對位址和相對位址的時候,可以使用urlparse模組中的urljoin方法將其拼合起來

import urlparse

r=urlparse.urljoin(

"","ice.html"

)print r

結果:http:

該方法使用時如果相對url中有協議字段,則優先使用相對url中的協議,否則使用絕對url中的協議字段

url的分解:

import urlparse

'')

注意:

a=b=

print a is b #false

print a==b #true

雖然a,b輸出的字串是一樣的,但兩者所接受的字典結構資料輸入的時候並不一樣,這是由

字典內部的無序性造成的

urlencode方法可以接受乙個可選的引數,預設為false,即當查詢資料列表中的value也為列表的時候,將其整個使用quote_plus方法進行編碼,並作為查詢引數的值。而當其值為true的時候,對於上述的這種情況會將value列表中的每個值都和keyword組成乙個查詢引數值對

例項:

u2=urllib.urlencode([(

'keyword',(

'value1'

,'value2'

,'value3'))

])print u2 #keyword=%28%27value1%27%2c+%27value2%27%2c+%27value3%27%29

u3 = urllib.urlencode([(

'keyword',(

'value1'

,'value2'

,'value3'))

],true

)print u3 #keyword=value1&keyword=value2&keyword=value3

# -*- coding:utf-8 -*-

import urllib

fp = urllib.urlopen(

"")op =

open

("index.html"

,"wb"

)n =

0while

true

: s = fp.read(

1024)if

not s:

break

op.write(s)

n=n+

len(s)

fp.close(

)op.close(

)print

"receive"

,n,"bytes from "

,fp.url

一般情況下,urlopen的可選引數data為空的時候,支援多種協議,包括本地檔案、http協議等,當為http資料的時候,urlopen將使用get方法來獲取相關的資源,但是當可選引數為非空的時候,則前面的協議字段必須為http,此時urlopen將使用post方法來獲取url資源,同時,data引數將作為post方法的資料一併傳遞給遠端伺服器,注意,這裡的data需要使用urlencode編碼過後的查詢資料

使用**:

設定**:這裡的**設定指明了在使用http協議的時候將使用**伺服器

proxies =

urllib.urlopen(url,proxies=proxies)

urllib模組中的urlretrieve方法,此方法和urlopen類似,最大的不同是此方法將獲取的資源直接儲存在檔案中,而不是返回乙個檔案物件

urlretrieve方法中還有乙個reporthook引數,此引數可以用來將urlretrieve方法執行的過程通過圖形化的方法顯示給使用者。其值是乙個函式,會在每次獲取資源塊的時候被呼叫,此函式有3個引數,分貝為檔案塊的個數,檔案塊的大小和檔案的大小,當檔案大小的值為-1的時候,表示此時無法獲得整個檔案的大小,特別是對於ftp流資料協議而言

使用reporthook引數得到獲取資源時候的實時資訊

import urllib

defreporthook

(block_count,block_size,file_size)

:if file_size==-1

:print

"received data"

,block_count*block_size

else

:print

"received data"

,block_count*block_size,

"/",file_size

urllib.urlretrieve(

"",filename=

"",reporthook=reporthook)

import urllib

defdownload

(url,filename="")

:def

reporthook

(block_count,block_size,file_size)

:if file_size==-1

:print

"can't determine the file size,now retrieved"

,block_count*block_size

else

: percentage =

int(block_count*block_size*

100.0

/file_size)

if percentage>

100:

print

"100%"

else

:print

"% d% % "

%(percentage)

filehandler,m = urllib.urlretrieve(url,filename,reporthook=reporthook)

print

"done"

return filehandler

download(

"",filename=

"")

python知識撿拾 閉包

例項1 defsay word def name name print word,name return name hi say 你好 hi 小明 你好 小明 bye say 再見 hi 小明 再見 小明例項2 deffunc res defput x defget return res retur...

python知識撿拾 內建方法

getattr setattr 和 getattribute 當讀取物件的某個屬性時,python會自動呼叫 getattr 方法。例如fruit.color將轉換為fruit.getattr color 例項 class fruit object def init self,color red p...

python知識撿拾 模組內建函式

如 def sum x 1,y 2 return x y print sum,1,3 2.filter 對某個序列做過濾處理 filter func or none,sequence 引數func是自定義的過濾函式,在函式func item 中定義過濾的規則,如果func為 none 則過濾項ite...