request庫使用


一、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('爬取失敗')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM