欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python爬蟲學(xué)習(xí)之requests的使用教程

 更新時(shí)間:2022年08月21日 08:58:26   作者:樣子的木偶  
requests庫是一個(gè)常用的用于?http?請(qǐng)求的模塊,它使用?python?語言編寫,可以方便的對(duì)網(wǎng)頁進(jìn)行爬取。本文將通過示例詳細(xì)講講requests庫的使用,需要的可以參考一下

requests庫簡(jiǎn)介

requests 庫是一個(gè)常用的用于 http 請(qǐng)求的模塊,它使用 python 語言編寫,可以方便的對(duì)網(wǎng)頁進(jìn)行爬取,是學(xué)習(xí) python 爬蟲的較好的http請(qǐng)求模塊。 它基于 urllib 庫,但比 urllib 方便很多,能完全滿足我們 HTTP 請(qǐng)求以及處理 URL 資源的功能。

requests庫安裝

如果已經(jīng)安裝了 anaconda ,就已經(jīng)自帶了 requets 庫(建議新手安裝 Python 的話直接安裝 anaconda 就好了,可以省去很多繁瑣的安裝過程的)。如果確實(shí)沒有安裝,可以通過以下兩種方式來進(jìn)行安裝

1、pip命令安裝

在有pip的情況下直接客戶端輸入命令下載

pip install requests

2、下載代碼進(jìn)行安裝

由于 pip 命令可能安裝失敗所以有時(shí)我們要通過下載第三方庫文件來進(jìn)行安裝。

github 上的地址為:https://github.com/requests/requests

下載文件到本地之后,解壓到 python 安裝目錄。

之后打開解壓文件,在此處運(yùn)行命令行并輸入:

python setup.py install

即可。

之后我們測(cè)試 requests 模塊是否安裝正確,在交互式環(huán)境中輸入

import requests

如果沒有任何報(bào)錯(cuò),說明requests模塊我們已經(jīng)安裝成功了

requests庫的使用

發(fā)送請(qǐng)求

在時(shí)用requests庫要導(dǎo)入requests模塊

import requests

接下來我們就可以嘗試獲取某個(gè)頁面

import requests

r = requests.get('http://www.baidu.com')
print(r.text)

現(xiàn)在,我們有一個(gè)名為 r 的 Response 對(duì)象。我們可以從這個(gè)對(duì)象中獲取所有我們想要的信息

除了get請(qǐng)求我們還有PUT,DELETE,HEAD 以及 OPTIONS 這些http請(qǐng)求方式

接下來我們先看看get請(qǐng)求

get請(qǐng)求

上面的例子就是我們用get方法獲取到了百度的首頁,并且輸出打印結(jié)果為

<!DOCTYPE html>
    <!--STATUS OK--><html> <head>......</body> </html>

Requests 允許你使用 ?params? 關(guān)鍵字參數(shù),以一個(gè)字符串字典來提供這些參數(shù)。舉例來說,如果你想傳遞 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? 的鍵都不會(huì)被添加到 URL 的查詢字符串里。

你還可以將一個(gè)列表作為值傳入:

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)

輸出結(jié)果

在這里,我們將請(qǐng)求的參數(shù)封裝為一個(gè) json 格式的數(shù)據(jù),然后在 get 方法中傳給 params 參數(shù),這樣就完成了帶參數(shù)的 GET 請(qǐng)求 URL 的拼接,省去了自己拼接 http://httpbin.org/get?age=22&name=jack 的過程,非常的方便。

此外,在上面我們看到返回的r.tetx雖然是個(gè)字符串,但是它其實(shí)是個(gè)JSON格式的字符串,我們可以通過 r.json() 方法來將其直接轉(zhuǎn)換為JSON格式數(shù)據(jù),從而可以直接解析,省去了引入 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'))

輸出結(jié)果

<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

抓取二進(jìn)制數(shù)據(jù)

從上面的例子中我們發(fā)現(xiàn)我們可以輕松獲取網(wǎng)頁的html文檔,但是如果我們?cè)跒g覽網(wǎng)址時(shí)想要獲取的是圖片、視頻、音頻這些內(nèi)容的話又該怎么辦呢?

我們知道視頻音頻這些不過就是二進(jìn)制碼,所以我們獲取二進(jìn)制碼就能夠獲取到這些形形色色的圖片視頻了,接下來我們看看如何獲取這些二進(jìn)制碼

接下來以baidu的站點(diǎn)圖標(biāo)為例:

import requests

r = requests.get('https://baidu.com/favicon.ico')
print(r.text)
print(r.content)
......  
b'\x00\......x00'

使用content我們可以輸出獲取的文檔的二進(jìn)制碼,但是我們又該如何處理這些二進(jìn)制碼呢?

其實(shí)很簡(jiǎn)單直接將其保留到本地就可以了

import requests

r = requests.get('https://baidu.com/favicon.ico')
with open('favicon.ico', 'wb') as f:
    f.write(r.content)

運(yùn)行之后就發(fā)現(xiàn)我們成功爬取了圖片,其實(shí)其他之類的視頻也是這樣操作的

post請(qǐng)求

接下來就是另外一種請(qǐng)求方式post請(qǐng)求

先看看是如何進(jìn)行請(qǐng)求的

import requests

data = {'name': 'jack', 'age': '25'}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)

輸出結(jié)果

在這里我們將需要的表單數(shù)據(jù)通過data進(jìn)行提交,完成一次post請(qǐng)求

同時(shí),你還可以為 ?data? 參數(shù)傳入一個(gè)元組列表。在表單中多個(gè)元素使用同一 key 的時(shí)候,這種方式尤其有效:

data = (('key1', 'value1'), ('key1', 'value2'))

POST請(qǐng)求的文件上傳

范例

import requests

files = {'file': open('favicon.ico', 'rb')}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

我們通過傳入files參數(shù)來實(shí)現(xiàn)文件上傳,不過前提是open方法中的文件需要存在(這里我上傳的文件就是在get請(qǐng)求里面獲取的百度圖標(biāo)),在這里不寫路徑表示該文件在當(dāng)前目錄下, 否則需要寫上完整的路徑。這個(gè)網(wǎng)站會(huì)返回響應(yīng),里面包含 files 這個(gè)字段,而 form 字段是空的,這證明文件上傳部分會(huì)單獨(dú)有一個(gè) files 字段來標(biāo)識(shí)。

利用requests返回響應(yīng)狀態(tài)碼

r.status_code:獲得返回的響應(yīng)狀態(tài)碼

r.status_code == requests.codes.ok:內(nèi)置狀態(tài)碼查詢

Response.raise_for_status():拋出異常的響應(yīng)狀態(tài)

利用前兩個(gè)方法我們可以獲得響應(yīng)的狀態(tài)

 r = requests.get('http://httpbin.org/get')
 r.status_code
200

查詢狀態(tài)

r.status_code == requests.codes.ok
True

如果我們發(fā)送一個(gè)錯(cuò)誤請(qǐng)求獲取,我們就可以使用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

如果響應(yīng)正常就不會(huì)拋出異常,返回以None

到此這篇關(guān)于Python爬蟲學(xué)習(xí)之requests的使用教程的文章就介紹到這了,更多相關(guān)Python requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例

    Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例

    這篇文章主要介紹了Python3加密解密庫Crypto的RSA加解密和簽名/驗(yàn)簽實(shí)現(xiàn)方法實(shí)例,需要的朋友可以參考下
    2020-02-02
  • python實(shí)現(xiàn)Pyecharts實(shí)現(xiàn)動(dòng)態(tài)地圖(Map、Geo)

    python實(shí)現(xiàn)Pyecharts實(shí)現(xiàn)動(dòng)態(tài)地圖(Map、Geo)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)Pyecharts實(shí)現(xiàn)動(dòng)態(tài)地圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 最新評(píng)論