<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
requests 庫是一個常用的用於 http 請求的模組,它使用 python 語言編寫,可以方便的對網頁進行爬取,是學習 python 爬蟲的較好的http請求模組。 它基於 urllib 庫,但比 urllib 方便很多,能完全滿足我們 HTTP 請求以及處理 URL 資源的功能。
如果已經安裝了 anaconda
,就已經自帶了 requets 庫
(建議新手安裝 Python 的話直接安裝 anaconda
就好了,可以省去很多繁瑣的安裝過程的)。如果確實沒有安裝,可以通過以下兩種方式來進行安裝
在有pip的情況下直接使用者端輸入命令下載
pip install requests
由於 pip 命令可能安裝失敗所以有時我們要通過下載第三方庫檔案來進行安裝。
在 github
上的地址為:https://github.com/requests/requests
下載檔案到本地之後,解壓到 python 安裝目錄。
之後開啟解壓檔案,在此處執行命令列並輸入:
python setup.py install
即可。
之後我們測試 requests 模組是否安裝正確,在互動式環境中輸入
import requests
如果沒有任何報錯,說明requests
模組我們已經安裝成功了
在時用requests庫要匯入requests模組
import requests
接下來我們就可以嘗試獲取某個頁面
import requests r = requests.get('http://www.baidu.com') print(r.text)
現在,我們有一個名為 r 的 Response 物件。我們可以從這個物件中獲取所有我們想要的資訊
除了get請求我們還有PUT,DELETE,HEAD 以及 OPTIONS 這些http請求方式
接下來我們先看看get請求
上面的例子就是我們用get方法獲取到了百度的首頁,並且輸出列印結果為
<!DOCTYPE html>
<!--STATUS OK--><html> <head>......</body> </html>
Requests 允許你使用 params 關鍵字引數,以一個字串字典來提供這些引數。舉例來說,如果你想傳遞 key1=value1 和 key2=value2 到 httpbin.org/get ,那麼你可以使用如下程式碼:
payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://httpbin.org/get", params=payload)
通過print(r.url),可以列印輸出URL
http://httpbin.org/get?key2=value2&key1=value1
注意字典裡值為 None 的鍵都不會被新增到 URL 的查詢字串裡。
你還可以將一個列表作為值傳入:
payload = {‘key1’: ‘value1’, ‘key2’: [‘value2’, ‘value3’]}
範例
import requests url = 'http://httpbin.org/get' params = { 'name': 'jack', 'age': 25 } r = requests.get(url, params = params) print(r.text)
輸出結果
在這裡,我們將請求的引數封裝為一個 json
格式的資料,然後在 get 方法中傳給 params
引數,這樣就完成了帶引數的 GET 請求 URL 的拼接,省去了自己拼接 http://httpbin.org/get?age=22&name=jack
的過程,非常的方便。
此外,在上面我們看到返回的r.tetx
雖然是個字串,但是它其實是個JSON格式
的字串,我們可以通過 r.json()
方法來將其直接轉換為JSON格式資料,從而可以直接解析,省去了引入 json 模組
的麻煩。範例如下
import requests url = 'http://httpbin.org/get' params = { 'name': 'jack', 'age': 25 } r = requests.get(url, params = params) print(type(r.json())) print(r.json()) print(r.json().get('args').get('age'))
輸出結果
<class 'dict'>
{'args': {'age': '25', 'name': 'jack'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.28.1', 'X-Amzn-Trace-Id': 'Root=1-6300e24d-71111778036e3f8339b55886'}, 'origin': '223.90.115.87', 'url': 'http://httpbin.org/get?name=germey&age=25'}
25
從上面的例子中我們發現我們可以輕鬆獲取網頁的html檔案,但是如果我們在瀏覽網址時想要獲取的是圖片、視訊、音訊這些內容的話又該怎麼辦呢?
我們知道視訊音訊這些不過就是二進位制碼,所以我們獲取二進位制碼就能夠獲取到這些形形色色的圖片視訊了,接下來我們看看如何獲取這些二進位制碼
接下來以baidu的站點圖示為例:
import requests r = requests.get('https://baidu.com/favicon.ico') print(r.text) print(r.content) ...... b'x00......x00'
使用content我們可以輸出獲取的檔案的二進位制碼,但是我們又該如何處理這些二進位制碼呢?
其實很簡單直接將其保留到本地就可以了
import requests r = requests.get('https://baidu.com/favicon.ico') with open('favicon.ico', 'wb') as f: f.write(r.content)
執行之後就發現我們成功爬取了圖片,其實其他之類的視訊也是這樣操作的
接下來就是另外一種請求方式post請求
先看看是如何進行請求的
import requests data = {'name': 'jack', 'age': '25'} r = requests.post("http://httpbin.org/post", data=data) print(r.text)
輸出結果
在這裡我們將需要的表單資料通過data進行提交,完成一次post請求
同時,你還可以為 data 引數傳入一個元組列表。在表單中多個元素使用同一 key 的時候,這種方式尤其有效:
data = (('key1', 'value1'), ('key1', 'value2'))
範例
import requests files = {'file': open('favicon.ico', 'rb')} r = requests.post('http://httpbin.org/post', files=files) print(r.text)
我們通過傳入files引數來實現檔案上傳,不過前提是open方法中的檔案需要存在(這裡我上傳的檔案就是在get請求裡面獲取的百度圖示),在這裡不寫路徑表示該檔案在當前目錄下, 否則需要寫上完整的路徑。這個網站會返回響應,裡面包含 files 這個欄位,而 form 欄位是空的,這證明檔案上傳部分會單獨有一個 files 欄位來標識。
r.status_code:獲得返回的響應狀態碼
r.status_code == requests.codes.ok:內建狀態碼查詢
Response.raise_for_status():丟擲異常的響應狀態
利用前兩個方法我們可以獲得響應的狀態
r = requests.get('http://httpbin.org/get') r.status_code 200
查詢狀態
r.status_code == requests.codes.ok True
如果我們傳送一個錯誤請求獲取,我們就可以使用Response.raise_for_status()
來丟擲異常
r = requests.get('http://httpbin.org/status/404') r.status_code 404 bad_r.raise_for_status() Traceback (most recent call last): File "requests/models.py", line 832, in raise_for_status raise http_error requests.exceptions.HTTPError: 404 Client Error
如果響應正常就不會丟擲異常,返回以None
到此這篇關於Python爬蟲學習之requests的使用教學的文章就介紹到這了,更多相關Python requests內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45