1.初步認識
// 代碼1
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
print response.read()
// 代碼2
import urllib2
request = urllib2.Request("http://www.baidu.com") //url請求
response = urllib2.urlopen(request) //打開網頁
print response.read() //讀取響應信息
說明:
- 獲取url請求:調用urllib2庫里的urlopen方法,協(xié)議為http請求
- urlopen函數(shù):urlopen( url, data, timeout)
- url:網址
- data:參數(shù)
- timeout:超時時間
- 返回響應信息:response.read()
2.數(shù)據(jù)傳送方式—POST&GET
1.POST 相對比較安全,參數(shù)信息不會全部顯示在網頁上,需要傳遞參數(shù),可以用data傳遞
import urllib
import urllib2
values = {"username":"1016903103@qq.com","password":"XXXX"} //注意到這個寫法
data = urllib.urlencode(values)
url = "https://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn"
request = urllib2.Request(url,data) //參數(shù)以data變量傳遞
response = urllib2.urlopen(request)
print response.read()
2.GET 相對不安全,將參數(shù)信息暴露在鏈接上
import urllibimport urllib2
values={}
values['username'] = "1016903103@qq.com"
values['password']="XXXX"
data = urllib.urlencode(values)
url = "http://passport.csdn.net/account/login"
geturl = url + "?"+data //注意到這塊有一個問號
request = urllib2.Request(geturl)
response = urllib2.urlopen(request)
print response.read()
3.參數(shù)信息
1.Headers頭部信息
[圖片上傳中。。。(1)]* User-Agent:請求身份
referer:”反盜鏈“ ——可以知道該網頁是從哪個鏈接點擊進來的(也就是網頁返回的地方)
Accept:指定客戶端可接收的內容類型(順序為接收端接受的次序)
Accept-Language:HTTP瀏覽器返回頁面信息優(yōu)先選擇的語言
Acceot-Charset:瀏覽器所接受的編碼集
Accept-Encoding:客戶端瀏覽器所允許的壓縮格式
說明:允許服務器將輸出內容發(fā)送到客戶端之前進行壓縮,節(jié)約帶寬Content-Type:【使用REST接口時】確定頁面解析方式——一般在post提交時使用
使用RESTful活SOAP服務時,服務器拒絕訪問application/xml:
-
Connection:是否持久連接
- Keep-Alive(或HTTP1.1):持久連接。
- 如何實現(xiàn):web服務器返回客戶端http頭信息中發(fā)送一個Content-Length
Cookie:HTTP發(fā)送請求時,同時會傳遞cookie中的內容
2.設置Headers
import urllib
import urllib2
url = 'http://www.server.com/login'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'username' : 'cqc', 'password' : 'XXXX' }
headers = { 'User-Agent' : user_agent }
data = urllib.urlencode(values)
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
page = response.read()
另外,若一些網頁設置防盜鏈的設置,可以設置referer來應對
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' ,
'Referer':'http://www.zhihu.com/articles' }
3.Proxy代理設置
考慮到這么一個情況,一些網頁統(tǒng)計IP地址訪問次數(shù),若一段時間內,一個IP訪問次數(shù)太多,這個IP就會被鎖定,因此需要設置代理迷惑網頁
import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
opener = urllib2.build_opener(proxy_handler)
else:
opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)
4.Timeout設置:設置等待時間
這里需要注意,urlopen(url, data, timeout),參數(shù)為省略參數(shù),即,可能會有多個data參數(shù)傳遞,因此在傳遞url,timeout(data參數(shù)為空時)參數(shù)時,需要寫明timeout=10,而非僅僅是一個10
import urllib2 // data為空
response = urllib2.urlopen('http://www.baidu.com', timeout=10)
import urllib2 //data不為空
response = urllib2.urlopen('http://www.baidu.com',data, 10)
5.DebugLog:打開Debug Log
import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
4HTTP請求方式
HTTP請求有:POST、GET、HEAD、PUT、DELET、OPTIONS
- HEAD:相當于GET(僅包含頭信息)
- PUT:類似于POST
區(qū)別:PUT指定資源存放位置,POST的資源存放位置由服務器決定 - OPTION:獲取當前URL所支持的方法
import urllib2
request = urllib2.Request(uri, data=data)
request.get_method = lambda: 'PUT'
response = urllib2.urlopen(request)