Python爬蟲(2):Requests的基本用法

雖然Python有內置的urllib庫,可以實現網絡的請求,但是我並不推薦。因爲urllib在很多時候使用起來不方便,比如加一個代理,處理Cookie時API都很繁瑣,再比如發送一個POST請求也很麻煩。

Requests就相當於urllib的升級版本,簡化了urllib的使用方法。有了Requests,我們可以用幾句代碼實現代理的設置,Cookie的設置,非常方便。下面我就給大家整理了Requests庫的使用方法和細節。詳細可以參考Requests官方文檔

什麼是Requests?

RequestsPython語言編寫,基於urllib3,採用Apache2 Licensed開源協議的HTTP庫。

它比urllib更加方便,可以節約我們大量的工作,完全滿足HTTP測試需求。是Python實現的簡單易用的HTTP庫。

安裝也很簡單:pip install requests

Requests的語法操作

1.實例引入

import requests

 

response = requests.get('http://www.baidu.com/')

print(response.status_code)

print(type(response.text))

print(response.text)

print(response.cookies)

運行結果:

200

<class 'str'>

 

# ...HTML網頁源碼..

<RequestsCookieJar[]>

可以看到,我們非常方便的就獲取到了Cookies.

2.各種請求方式

import requests

 

requests.get('http://httpbin.org/get') # 發送get請求

requests.post('http://httpbin.org/post') # 發送post請求,只要調用post方法,傳入一個url參數

requests.put('http://httpbin.org/put')

requests.delete('http://httpbin.org/delete')

官方文檔裏提供的這個網址足夠我們測試這些請求方式了。

請求

1.基本GET請求

import requests

 

resp = requests.get('http://httpbin.org/get')

print(resp.text)

這個我們前面有使用過,也是最常用的方法。運行成功就可以看到網頁的源碼了。

2.帶參數的GET請求

import requests

 

data = {

    'name' : 'jack',

    'age' : 20

}

resp = requests.get('http://httpbin.org/get', params=data)

print(resp.text)

傳入參數只需要我們把數據生成一個字典,然後調用params參數,賦值給他就可以,是不是很方便。

3.解析json

import requests

import json

 

resp = requests.get('http://httpbin.org/get')

print(resp.text)

print(resp.json())

print(json.loads(resp.text))

print(type(resp.json()))

運行結果:

可以看出Requestsjaon解析和jsonloads方法解析出來的結果是完全一樣的。所以Requests可以很方便的解析json數據。

4.獲取二進制數據

import requests

 

resp = requests.get('http://www.baidu.com/img/baidu_jgylogo3.gif')

print(resp.content)

print(resp.text)

運行成功我們可以看到content方法獲取的圖片頁面源碼是二進制數據,而text獲取的則是字符串代碼。顯然獲取圖片這種二進制數據需要使用content方法。

with open('logo.gif','wb') as f:

    f.write(resp.content)

這樣我們就保存了圖片,我們可以在文件夾下看到這張圖片。

5.添加headers

import requests

 

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}

resp = requests.get('http://www.baidu.com', headers=headers)

print(resp.text)

有些網頁如果我們直接去請求的話,他會查看請求的對象是不是瀏覽器,如果沒有瀏覽器信息就會禁止我們爬蟲的訪問,這個時候我們就要給爬蟲加一個headers,加一個瀏覽器的user-agent信息。這樣我們就可以正常訪問了。如果有的夥伴不知道怎麼得到User-Agent,可以打開瀏覽器的審查元素,找到network,隨便點擊一個鏈接就可以看到User-Agent的信息了。

6.基本POST請求

import requests

 

data = {

    'name' : 'jack',

    'age' : 20

}

resp = requests.post('http://httpbin.org/post', data=data)

print(resp.text)

一個POST必然是要有一個Form Data的表單提交的,我們只要把信息傳給data參數就可以了。一個POST請求只需要調用post方法,是不是特別方便呢。如果不覺得方便的話,可以去參考urllib的使用方法。

響應

1.response屬性

import requests

 

response = requests.get('http://www.baidu.com/')

print(type(response.status_code)) # 狀態碼

print(type(response.text)) # 網頁源碼

print(type(response.headers)) # 頭部信息

print(type(response.cookies)) # Cookie

print(type(response.url)) # 請求的url

print(type(response.history)) # 訪問的歷史記錄

獲取這些信息只需要簡單的調用就可以實現了。

2.狀態碼判斷

>>>import requests

 

>>>response = requests.get('http://www.baidu.com/')

>>>exit() if not resp.status_code == 200 else print('Sucessful')

Sucessful

如果發送了一個錯誤請求(一個4XX客戶端錯誤,或者5XX服務器錯誤響應),我們可以通過 Response.raise_for_status() 來拋出異常:

>>>bad_r = requests.get('http://httpbin.org/status/404')

>>>bad_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

好了,這篇文章我們瞭解了Requests庫的基本語法操作,相信大家對Requests庫的請求和響應已經很清楚了,大家完全可以抓取一些網頁了。

紙上得來終覺淺,絕知此事要躬行,大家加油!

鏈接:https://www.jqhtml.com/13264.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章