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...