1 先扒一個網頁下來看看
import urllib2
response=urllib2.urlopen("http://www.baidu.com")
print response.read()
然后你就獲得到了一個網頁的源代碼
response=urllib2.urlopen("http://www.baidu.com")
這個意思就是在urllib2庫中訪問urlopen函數墩朦,傳入地址獲取返回對象
urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, cafile=None, capath=None, cadefault=False, context=None)
第一個參數url即為URL扰柠,第二個參數data是訪問URL時要傳送的數據播瞳,第三個timeout是設置超時時間驾窟。
后面幾個參數cafile、capath、cadefault參數:用于實現可信任的CA證書的HTTP請求。context參數:實現SSL加密傳輸怎棱。(基本上很少用)
第二三個參數是可以不傳送的,data默認為空None绷跑,timeout默認為?socket._GLOBAL_DEFAULT_TIMEOUT
第一個參數URL是必須要傳送的拳恋,在這個例子里面我們傳送了百度的URL,執(zhí)行urlopen方法之后砸捏,返回一個response對象谬运,返回信息便保存在這里面。
print response.read()
response.read()打印獲取到的代碼詳情垦藏,response對象
2 urlopen參數可以傳入一個request請求,它其實就是一個Request類的實例梆暖,構造時需要傳入Url,Data等等的內容。比如上面的兩行代碼掂骏,我們可以這么改寫
(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False):
request 的參數 header報頭
import urllib2
request = urllib2.Request("http://www.baidu.com")
response = urllib2.urlopen(request)
print response.read()
這樣代碼清晰點
POST和GET請求
POST方式:
importurllib
importurllib2
values = {"username":"100010@qq.com","password":"XXXX"}
data = urllib.urlencode(values)
url ="https://www.baidu.com"
request = urllib2.Request(url, data)
response = urllib2.urlopen(request)
printresponse.read()
隨便寫了個假的轰驳,傳參dada 就是你登錄需要驗證的信息 有些還有驗證碼什么的就另說了引入了urllib庫對字典values進行了urlencode編碼
字典的另一種定義方式 這樣更好的看到每個參數
values={}
values['username']="10010@qq.com"
values['password']="XXXX"
GET方式:
get方式就是直接把參數拼接在請求地址后面就行
importurllib
importurllib2
values={}
values['username']="10010@qq.com"
values['password']="XXXX"
data=urllib.urlencode(values)
url="http://www.baidu.com"
geturl=url+"?"+data
request=urllib2.Request(geturl)
response=urllib2.urlopen(request)
printresponse.read()
很簡單是吧
接下來是一些其他方面的應用
有些網站不會同意程序直接用上面的方式進行訪問,如果識別有問題弟灼,那么站點根本不會響應滑废,所以為了完全模擬瀏覽器的工作,我們需要設置一些Headers 的屬性袜爪。
在登錄一個界面之后就會發(fā)現里面的樣式什么的都變了,直接進入瀏覽器的調試模式薛闪,查看請求數據里面有許多的Request URL辛馆,還有headers,下面便是response豁延,圖片顯示得不全昙篙,小伙伴們可以親身實驗一下。那么這個頭中包含了許許多多是信息诱咏,有文件編碼啦苔可,壓縮方式啦,請求的agent啦等等袋狞。
其中焚辅,agent就是請求的身份映屋,如果沒有寫入請求身份,那么服務器不一定會響應同蜻,所以可以在headers中設置agent,例如下面的例子棚点,這個例子只是說明了怎樣設置的headers,小伙伴們看一下設置格式就好湾蔓。這里agent就代表瀏覽器瘫析,我們偽造瀏覽器進行訪問
importurllib
importurllib2
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()
這樣我們就在進行請求的header里面加入了useragent
User-Agent : 有些服務器或 Proxy 會通過該值來判斷是否是瀏覽器發(fā)出的請求
Content-Type : 在使用 REST 接口時,服務器會檢查該值默责,用來確定
HTTP Body 中的內容該怎樣解析贬循。
application/xml : 在 XML RPC,如 RESTful/SOAP 調用時使用
application/json : 在 JSON RPC 調用時使用
application/x-www-form-urlencoded : 瀏覽器提交 Web 表單時使用在使用服務器提供的 RESTful 或 SOAP 服務時桃序, Content-Type 設置錯誤會導致服務器拒絕服務