日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

爬虫_python3_requests_2

發布時間:2025/3/20 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫_python3_requests_2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pip install requests

?

進行簡單的操作

發送一個get請求

# 發送請求 import requests response = requests.get('http://httpbin.org/get') # 獲取返回的html信息 print(response.text)

這樣就發送了一個get請求,并且還打印了返回的內容,這個不再需要知道網頁是哪個編碼的,不過有時會出現編碼問題,但是你也可以指定編碼類型,如:

response.encoding = 'utf-8'

?

?指定完成后就可以正常編碼了,前提你得知道網頁的編碼類型。

出了上面這些,我們還可以獲取下面的信息

print(response.headers)#獲取頭部信息 # 請求狀態碼 print(response.status_code) # 獲取網頁的二進制內容 print(response.content) print(response.url) # 獲取請求的url print(response.cookies) # 獲取cookie

是不是覺得很容易,一行代碼就可以了。不再需要幾步代碼什么的了。

?

接下來被反爬的話帶上個請求頭來進行請求

# 還可以添加請求頭進行請求 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'} response = requests.get('http://httpbin.org/get', headers=headers ) print(response.headers) print(response.text)

?

?加個請求頭也就是加個關鍵字參數而已

還可以進行帶參數的get請求

# 進行帶參數的get請求 data = {'name': 'june', 'password': 123456} response = requests.get('http://httpbin.org/get', params=data) print(response.text)

?

?那如果需要登陸呢?post請求怎樣發?告訴你,照樣很簡單

# 進行post請求 data = {'name': 'june', 'password': 123456} response = requests.post('http://httpbin.org/post', data=data, headers=headers) print(response.text)

是不是很簡單,也是加個data關鍵字參數,把要提交的登陸參數進行post上去。

?

那除了上面的兩個請求,還能進行別的請求嗎?我可以非常開心地告訴你,可以的。比如,你要發個put請求,如這樣

requests.put() requests.delete()

這個就是發送put請求和delete請求的,其他的請求也是這樣發送,就不一 一說了。

?

進行復雜點的請求

?

在登陸的時候我們有時候需要輸入驗證碼,那怎樣輸呢?爬蟲的看不了網頁,最簡單的做法就是把這個驗證碼的圖片下載下來然后手動輸入,那么我們怎樣下載呢?我們可以向這個圖片的url發送請求,然后把返回內容以二進制方法存入文件里面就可以了。

代碼如下:

# 從網上讀取二進制數據,比如圖片 response = requests.get('https://www.baidu.com/img/bd_logo1.png', headers=headers) # 這個是直接獲取字節碼,這個是要保存的文件 print(response.content) # 這個是獲取解碼后的返回內容,這個是亂碼 print(response.text) # 用文件來把圖片下載下來 with open('baidu.png', 'wb') as f: # 注意寫的方式是以二進制方式寫入f.write(response.content)print('下載完畢')

?

還是很簡單,不得不說,這個庫太好用了。

當我們需要上傳文件的時候,比如圖片,我們還可以用post方法把他發送出去?

# 上傳文件 files = {'picture': open('baidu.png', 'rb')} response = requests.post('http://httpbin.org/post', files=files) print(response.text)

?獲取cookie并簡單處理一下

# 獲取cookie response = requests.get('https://www.baidu.com') for k, v in response.cookies.items():print(k, '=', v)

?

?當網頁返回內容是json格式是,我們不需要用json庫來解析,我們可以直接利用requests的方法進行解析,兩者的效果是一樣的

# 解析json j = response.json() # 可以用json庫來解析,結果一樣

?

?在urllib庫時保存登陸信息需要把cookie保存下來,但是在requests庫里面,我們只需要用requests.session()來保存信息就可以了。

# 用會話來保持登陸信息 session = requests.session() response = session.get('http://httpbin.org/cookies/set/number/123456') print(response.text)

?

?這樣就可以保存登陸了,不需要為cookie操心了,但是每次獲取一個session就可以了,然后用來請求或者其他操作。不需要每次請求或者操作都創建一個sesion出來,這樣是保存不了登陸信息的

當一個網站不安全,需要你用證書驗證的,比如這個網站

這時要訪問里面的網站內容,我們就需要進行驗證,代碼如下

# 證書驗證 response = requests.get('https://www.12306.cn', verify=False) # 不加這個關鍵字參數的話會出現驗證錯誤問題,因為這個網站的協議不被信任

?這樣就可以進行訪問了,但是會有一條警告

E:\anaconda\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsInsecureRequestWarning)

覺得不美觀的,我們還可以在請求時加個cert關鍵字參數,值為可信任的證書,為一個元組,寫上賬號和密碼之類的,這里就不演示了

?

遇到需要認證的網站,我們也可以這樣

from requests.auth import HTTPBasicAuth # 設置認證 # requests.get('需要認證的網址', auth=HTTPBasicAuth('user', 'passwd')) # 由于找不到需要認證的網址,所以先寫個主體 # 還可以這樣認證 # requests.get('需要認證的網址', auth=('user', 'passwd')) # 這樣就簡單點

由于我找不到需要認證的網站,所以就不演示了。

?

requests還可以用代理ip來進行請求網站來防止ip被封以至于自己爬不了的尷尬。使用代理ip也比urllib庫簡單得多,代碼如下:

# 設置代理 proxies = {'http': 'http://122.114.31.177:808','https': 'https://119.28.223.103:8088'} # 在請求時添加上列代理 response = requests.get('http://httpbin.org/get', proxies=proxies) print(response.text)

上面的字典格式需要一 一對應,然后在請求時加上個關鍵字參數proxies就可以了。

?

?請求異常處理

?

在程序運行時,遇到錯誤時程序就會被強行停止,如果想要繼續運行,就需要進行捕捉異常來讓程序繼續運行。

?在requests庫中有個處理異常的庫requests.exceptions

?這里簡單地處理下請求超時的處理情況

?

?

import requests from requests.exceptions import ReadTimeout, ConnectTimeout, HTTPError, ConnectionError, RequestException # 捕捉異常 try:response = requests.get('http://httpbin.org/get', timeout=0.1) # 規定時間內未響應就拋出異常print(response.text) except ReadTimeout as e:print('請求超時') except ConnectionError as e:print('連接失敗') except RequestException as e:print('請求失敗')

?

這里捕捉了三個異常,因為ReadTimeout是ConnectionError的子類,所以先捕捉ReadTimeout,再捕捉父類的。而ConnectionError 和 RequestException 同理

?

更多的異常處理可以查看文檔哈?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/tianqizhi/p/8903979.html

總結

以上是生活随笔為你收集整理的爬虫_python3_requests_2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。