[爬蟲小記] 優秀的requests模組
阿新 • • 發佈:2018-11-22
前言
除了當初學習爬蟲的時候用過urllib、urllib2,後來再沒用過了。都是使用的requests,本文將記錄一直以來個人使用 requests的經驗總結。
正文
import requests r = requests.get('http://www.baidu.com') print(r.status_code) #200 獲取狀態碼 print(r.text) #常用,獲取Unicode形式的response,預設以utf8解碼為Unicode print(r.content) #獲取位元組形式的response,可供編碼檢測 print(chardet.detect(r.content)) #編碼由原網頁決定,這裡的檢測只是一定概率正確 # 如果r.text輸出有亂碼,說明網站非utf8編碼,需修改response編碼 r.encoding = 'gbk' # gbk , gb18030 等 myparams = {'name': 'lei', 'age': 222} #這個引數會以明文方式直接填充到url中:http://www.baidu.com/?age=222&name=lei #它是http請求中的QueryString requests.get('http://www.baidu.com',params=myparams) #data引數在post中傳遞表單,不會填充在url中,是http請求的body requests.post('http://www.baidu.com', data={'name': 'lei', 'age': 222}) #上傳檔案 with open(r'c:\words_v1.txt')as f: _file = {'file': f} requests.post('http://www.baidu.com', files=_file) #傳入cookie (官方的寫法較複雜,不必採用) requests.get('http://www.baidu.com',headers={'Cookie':'PSTM=1525659528; BD_UPN=12314753;'}) #取消ssl驗證以訪問https站點 requests.get('https://www.baidu.com', verify=False) #代理使用 _list = ["http://41.118.132.69:4433", "http://51.228.12.69:4423"] for i in _list: p = {'http': i} r = requests.get('https://www.baidu.com', proxies=p) if r.status_code == 200: # do something break #下載檔案 ,iter_count 限制每次下載的位元組數,逐塊寫入 with open(r'xx.png', 'wb')as f: for c in requests.get('http://xxx.com', stream=True).iter_content(1024): f.write(c) #保持會話 ,常用在模擬登入、登入以訪問資源等情況 s = requests.session() #Session() 一樣 #s 與直接用requests的大部分用法一致,如get post UA = {'User-Agent':'xxx'} s.headers = UA #或 s.headers.update(UA) #傳入cookie dict_cookie = dict(a='123', b='321') requests.utils.add_dict_to_cookiejar(s.cookies, dict_cookie) # 實際操作時這種方式也複雜,我們想要的是從瀏覽器中複製整個cookie字串 # 到python程式碼中直接使用,而無需修改為字典形式,參見下面的方式 #傳入cookie 方式二 s.get('http://www.baidu.com', headers={'Cookie': 'PSTM=1525659528; BD_UPN=12314753;'}) #持久化cookie import json with open('cookie.txt', 'wb') as f: cookie = s.cookies.get_dict() json.dump(cookie, f) #從檔案載入cookie with open('cookie.txt') as f: cookie = json.load(f) s.cookies.update(cookie)
有高見請留言。
宣告:本文章為個人對技術的理解與總結,不能保證毫無瑕疵,接收網友的斧正。