一、requests.get(url,parama=None,**kwargs)
url:擬獲取頁面的url鏈接
parma:url中的額外參數,字典或字典流格式,可選
**kwargs:12個控制訪問參數
二、Response對象屬性
r.status_code: http請求的返回狀態,200表示連接成功,404表示失敗(除了200外都是屬於失敗的)
r.text: http相應內容的字符串形式,即,URL對應的頁面內容
r.encoding: 從HTTP hradet 中猜測的相應內容編碼方式
r.apparent_encoding: 從內容中分析出的相應內容編碼方式(備選編碼方式)
r.content: HTTP響應內容的二進制形式
注意:r.encoding:如果header中不存在charset,則認為編碼為ISO-8859-1
r.apparent_encoding:根據網頁內容分析出的編碼方式
三、理解Request庫的異常
requests.ConnectioError: 網絡連接錯誤異常,如dns查詢失敗、拒絕連接等
requests.HTTPError: HTTP錯誤異常
requests.URLRequired: URL缺失異常
requests.TooManyRedirects: 超過最大重定向次數,產生重定向異常
requests.ConnectTimeout: 連接遠程服務器超時異常
requests.Timeout: 請求URL超時,產生超時異常
r.raise_for_status() 如果不是200,產生異常request.HTTPError
四、Request庫的7個主要方法
1、request.request() 構造一個請求,支撐一下各方法的基礎方法
requests.get(method,url,**kwargs)
①method:請求方法,對應get/put/post等7種
②url:擬獲取頁面的URL鏈接
③**kwargs:控制訪問參數,共13個
params:字典或字節序列,作為參數增加到URL中
kw = {'key1':'value1' , 'key2':'value2'} r = requests.request('GET','http://python123.io/ws',params=kv) print(r.url)
data:字典、字節序列或者文件對象,作為Request的內容
kw={'key1':'value1','key2':'value2'} r=requests.request('POST','http://python123.io/ws',data=kw) body='注冊內容' r=requests.request('POST','http://python123.io/ws',data=body)
json:JOSN格式的數據,作為Request的內容
kv={'key1':'value1','key2':'value2'} r=requests.request('POST','http://python123.io/ws',json=kv)
headers:字典,http定制頭
hd={'user_agent':'chram/10'} r=requests.request('POST','http://python123.io/ws',haders=hd)
cookie:字典或Cookiejar,Request中的cookie
auth:元祖,支持HTTP認證功能
files:字典類型,傳輸文件,向某個鏈接提交某個文件
fs={'file':open('data,xls','rb')} r=requests.request('POST','http://python123.io/ws',files=fs)
timeout:設定超時時間,以秒為單位
r=requests.request('GET','http://python123.io/ws',timeout=10)
proxies:字典類型,設定訪問的代理服務器,可以增加登陸認證
pxs={'http:'http://user:pass@10.10.10.1:1234' 'https':'https://10.10.10.1:4321'} r=requests.request('GET','http:www.baidu.com',proxies=pxs)
allow_redirects:True/False,默認為True,重定向開關
stream:True/False,默認為True,獲取內容立即下載開關
verify:True/False,默認為True,認證SSL證書開關
cert:本地SSL證書路徑
2、requests.get() 獲取HTML網頁的主要方法,對應HTTP的get
3、requests.head() 獲取HTML網頁頭信息的方法,對應於HTTP的head
4、requests.post() 向HTML網頁提交post請求的方法,對應於HTTP的post
requests.post(url,data=None,json=None,**kwargs)
5、requests.put() 向HTML網頁提交put請求的方法,對應於HTTP的put
6、requests.patch() 想HTTP網頁提交局部修改請求,對應於HTTP的patch
7、requests.delete() 向HTTP頁面提交刪除請求,對應於HTTP的delete
五、HTTP協議
1、HTTP,超文本傳輸協議。
①HTTP是基於‘請求與響應’模式的、無狀態的應用層協議。
②HTTP協議采用URL作為定位網絡資源的標識。
③URL格式:http://host[:port][path]
host:合法的Internet主機域名或IP地址
post:端口號,默認端口好為80
path:請求資源的路徑
④HTTP URL的理解:
URL是通過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源
六、HTTP協議對資源的操作
GET 請求獲取URL位置的資源
HEAD 請求獲取URL位置資源的響應報告,即獲得該資源的頭部信息
POST 請求向URL位置的資源后附加新的數據
PUT 請求向URL位置儲存的一個資源,覆蓋原URL位置的資源
PATCH 請求局部更新URL位置的資源,即改變該處資源的部分內容
DELETE 請求刪除URL位置存儲的資源
七、案例
1 import requests 2 import os 3 4 url='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1580967300997&di=2238943a2e9fbebde4de06e2a3b0951d&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn15%2F275%2Fw640h435%2F20181010%2Fcaba-hkrzvkw4936632.jpg' 5 hd ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} 6 file_name = './' 7 file = file_name+url.split('cn')[-1] 8 try: 9 r = requests.get(url,headers=hd,verify=False) #關閉SSL證書 10 r.raise_for_status() 11 # print(r.status_code) 12 # print(r.text) 13 #判斷文件是否存在,如果文件不存在則創建該文件,如果文件存在則不創建文件 14 if not os.path.exists(file): 15 with open(file,'wb') as f: 16 f.write(r.content) #保存文件 17 f.close() 18 print('文件保存成功') 19 20 else: 21 print('文件已經存在!') 22 except: 23 print('url訪問報錯')
1 import requests 2 3 url = 'http://www.ip138.com/iplookup.asp?ip=' 4 hd ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'} 5 ip_address = {'ip':'117.25.45.192'} 6 7 try: 8 r = requests.get(url+'159.226.8.6',headers=hd) 9 # print(r.encoding) 10 r.encoding = r.apparent_encoding #轉換編碼方式為內容分析出的相應編碼方式 11 # print(r.status_code) 12 r.raise_for_status() 13 print(r.text) 14 except: 15 print('爬取失敗')