一.urllib2/urllib
1.請求和響應(yīng)
向指定url獲取數(shù)據(jù)翔悠,最簡單形式:urllib2.urlopen(URL)
請求和響應(yīng)分離:請求:request=urllib2.Request(URL)
????????響應(yīng):urllib2.urlopen(request,timeout=...)
帶請求頭和post數(shù)據(jù)的請求:data=urllib.urlencode(post_data)
????????????urllib2.urlopen(URL,data,header)
添加特定header:
request.add_header('User-Agent', '....')
響應(yīng)response:
response.read()
response.headers
response.get_code()
2.異常處理:
try:
urllib2.urlopen(request)
except urllib2.URLError, e: #urllib2.HTTPError
print e.reason,e.code
3.Cookie處理(詳解)
import urllib2
import cookielib
#聲明一個CookieJar對象實例來保存cookie
cookie = cookielib.CookieJar()
#利用urllib2庫的HTTPCookieProcessor對象來創(chuàng)建cookie處理器
handler=urllib2.HTTPCookieProcessor(cookie)
#通過handler來構(gòu)建opener
opener = urllib2.build_opener(handler)
#此處的open方法同urllib2的urlopen方法,也可以傳入request
response = opener.open('http://www.baidu.com')
for item in cookie:
print 'Name = '+item.name
print 'Value = '+item.value
4.proxy的設(shè)置
import urllib2
proxy = urllib2.ProxyHandler(('http':'127.0.0.1'))
opener = urllib2.build_opener(proxy,) #urllib2.install_opener 修改全局的opener
response = opener.open('....')
二.Requests
1.請求(get,post,put,delete,head,options)
requests.get('...',headers=headers)
r = requests.post("...",data=post_data)
r = requests.put("...")
r = requests.delete("...")
r = requests.head("...")
r = requests.options("...")
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("...", params=payload)
證書驗證:r = requests.get('https://kyfw.12306.cn/otn/', verify=True)
2.響應(yīng)與響應(yīng)編碼
返回字節(jié)形式內(nèi)容:r.content
返回文本形式內(nèi)容:r.text
返回狀態(tài)碼:r.status_code
響應(yīng)頭:r .headers
cookies: r.cookies
返回json對象:r.json()
返回頁面url:r.url
響應(yīng)歷史:r.history
超時設(shè)置:r = requests.get("...",timeout=..)
字節(jié)流讀取內(nèi)容:
r = requests.get("...", stream=True)
r.raw r.raw.read(10)
根據(jù)http頭猜測編碼方式:r.encoding
使用chardet預(yù)測:
r = requests.get(...)
r.encoding = chardet.detect(r.content)['encoding']
print r.text
3.異常處理
r.raise_for_status( ):主動拋出異常,當(dāng)響應(yīng)碼為4xx或者5xx時拋出異常,200時拋出None
4.cookie處理
自定義cookies,直接發(fā)送出去,無需像urllib2一樣構(gòu)建opener:
r = requests.post("....", cookies=cookies)
可打印出所有cookie的值對:
for key in r.cookies.keys():
print key,':',r.cookies.get(key)
5.proxy的設(shè)置
直接通過參數(shù)進行單次請求 r = requests.get("....", proxies=proxies)
6.session
創(chuàng)建session:
s = requests.Session()
設(shè)置cookie
s.cookies.set(cookie['name'],cookie['value'])
更新headers:
s.headers.update({'x-test': 'true'}) 存在則更新刃榨,不存在就合并