標籤:python 網路編程
一.urllib模組介紹
import urllib
先看個小例子,列印結果為一個socket串連
樣本一:
import urlliburl=r‘http://www.baidu.com‘fp=urllib.urlopen(url)print fp
>>>
<addinfourl at 43317888 whose fp = <socket._fileobject object at 0x02947530>>
>>>
1.基本操作
urlopen返回對象提供方法
read(),readline(),readlines(),close() 這些方法的使用方法與檔案對象完全一樣
info() 返回一個httplib.HTTPMessage對象,表示遠程伺服器返回的頭資訊
getcode() 返回HTTP狀態代碼,如果是http請求,200請求成功完成,404請求網址未找到
geturl() 返回請求的url
樣本二:
import urlliburl=r‘http://www.baidu.com‘fp=urllib.urlopen(url)#print fp.read() #列印網頁內容,相當於一個大的字串,和右鍵查看網頁原始碼效果一樣#print fp.readline() #列印一行內容,是一個元素#print fp.readlines() #全部內容以列表的形式列印出來print fp.info() #列印頭資訊print fp.getcode() #列印返回狀態代碼print fp.geturl() #列印請求的urlfp.close() #關閉串連
2.urllib.urlretrieve
臨時存放 urllib.urlretrieve(url)
本地存放 urllib.urlretrieve(url,‘檔案的絕對路徑‘)
樣本三:
import urlliburl=r‘http://www.baidu.com‘filename=urllib.urlretrieve(url)print type(filename) #元群組類型print filename #第一個參數為臨時檔案路徑,第二個參數表示伺服器的回應標頭資訊filename1=urllib.urlretrieve(url,‘baidu.html‘) #在統計目錄下產生一個baidu.html檔案
>>>
<type ‘tuple‘>
(‘c:\\users\\zhao\\appdata\\local\\temp\\tmpzjmhu6‘, <httplib.HTTPMessage instance at 0x02BD7CD8>)
>>>
3.urllib.cleanup
清除由於urllib.urlretrieve()所產生的緩衝
4.urllib.quot 和urllib.quote_plus
區別在於是否解碼符號/
樣本四:
import urlliburl=r‘http://www.baidu.com/[email protected]#/‘#url編碼print urllib.quote(url)print urllib.quote_plus(url)#url解碼print urllib.unquote(urllib.quote(url))print urllib.unquote_plus(urllib.quote_plus(url))
>>>
http%3A//www.baidu.com/%21%40%23/
http%3A%2F%2Fwww.baidu.com%2F%21%40%23%2F
http://www.baidu.com/[email protected]#/
http://www.baidu.com/[email protected]#/
>>>
5.urllib發送get和post請求
兩種方式區別如下:(粘貼自百度知道,個人覺得總結的比較全面)
①get是從伺服器上擷取資料,post是向伺服器傳送資料;
②get是把參數資料隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程;
③對於get方式,伺服器端用Request.QueryString擷取變數的值,對於post方式,伺服器端用Request.Form擷取提交的資料;
④get傳送的資料量較小,不能大於2KB。post傳送的資料量較大,一般被預設為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB;
⑤get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。
建議:
①get方式的安全性較Post方式要差些,包含機密資訊的話,建議用Post資料提交方式;
②在做資料查詢時,建議用Get方式;而在做資料添加、修改或刪除時,建議用Post方式。
樣本五:
假設我們本地有一段test.php代碼如下:
<?phpprint_r("get params:\n");var_dump($_GET);print_r("post params:\n");var_dump($_POST);
現在發送get和post請求:
import urlliburl=r‘http://127.0.0.1:8888/test.php‘get_params=urllib.urlencode({‘name‘:‘zhzhgo‘,‘age‘:25})post_params=urllib.urlencode({‘i‘:1,‘j‘:2})#print get_params,type(get_params) #age=25&name=zhzhgo <type ‘str‘>fp=urllib.urlopen(url+"?"+get_params,post_params)print fp.read()
>>>
get params:
array(2) {
["age"]=>
string(2) "25"
["name"]=>
string(6) "zhzhgo"
}
post params:
array(2) {
["i"]=>
string(1) "1"
["j"]=>
string(1) "2"
}
>>>
二.urllib2模組
urllib與urllib2需要配合使用,區別如下:
①urllib2可以接受Request類來設定url請求的headers,urllib僅可以接受url;
②urllib提供urlencode方法產生請求參數字串,urllib2沒有;
③urllib2僅有quote無quote_plus相關方法;
④urllib2無urlretrieve方法。
樣本六:
#應用urllib2接受Request類來設定url請求的headers來跳過登陸import urllib,urllib2import base64url=r‘http://127.0.0.1:8080/test.html‘#strip()預設刪除空白符,此時刪除分行符號(包括‘\n‘,‘\r‘,‘\t‘,‘ ‘)base64string=base64.encodestring(‘admin:123456‘).strip()authheader="Basic "+base64stringreq=urllib2.Request(url)req.add_header(‘Authorization‘,authheader)urllib2.urlopen(req)
三.urlparse模組
urlparse模組主要是把url拆分為6部分,並返回元組
樣本七:
import urlparseurl=r‘http://www.baidu.com/user/index.html;18?name=zhzhgo&age=25!#8888‘res=urlparse.urlparse(url)print resprint res[0]print res[1]
>>>
ParseResult(scheme=‘http‘, netloc=‘www.baidu.com‘, path=‘/user/index.html‘, params=‘18‘, query=‘name=zhzhgo&age=25!‘, fragment=‘8888‘)
http
www.baidu.com
>>>
本文出自 “今日的努力,明日的成功!” 部落格,請務必保留此出處http://zhzhgo.blog.51cto.com/10497096/1678954
python網路編程