Python 爬蟲 -- 使用 Requests 獲取網頁

requests 包用於獲取網站的內容,使用 HTTP 協議,基於 urllib3 實現。其官方中文文檔爲:Requests: HTTP for Humans

requests 的基本使用方法很簡單,這裏記錄一些最常用的方法,完整的介紹見其官方文檔,以下介紹基於 Python 3.5。

使用 requests 首先需要導入它:

import requests

發送請求

最基本的方法是 GET 請求:

url = 'http://www.zju.edu.cn/'
r = requests.get(url)

返回的 r 是一個Response類對象,包含所有返回數據,可以從這個 Response 中提取所需的信息。

除了get()外,常用的請求還有post(),用法完全相同。除此之外 requests 也支持其它各種請求方法,具體參見其文檔說明。

可通過r.url()獲取請求的 URL。

讀取響應內容

使用 Response 的 text 屬性即可:

r = requests.get(url)
print(r.text)

text 屬性是針對相應內容是文本(如 HTML 等)的情況下使用,如果返回的數據是二進制數據(如圖片等),則通過 content 屬性來讀取二進制比特流:

r = requests.get(url)
f = open('file', 'wb')
f.write(r.content)

如果返回的數據是 json,requests 中自帶了一個解析器,可以直接使用 json() 函數進行解析,返回的是一個字典:

上面這個例子演示了淘寶的 IP 查詢服務。

附加查詢參數

可以構造類似 http://www.baidu.com/s?ie=utf-8&wd=Python 這樣的查詢 URL,其中附加在? 之後的部分就是查詢參數,可以手動構造這樣一個字符串,不過 requests 中提供了更優雅的解決方案,使用一個字典作爲 params 參數即可:

url = 'http://www.baidu.com/s'
payload = {'wd': 'Python', 'ie': 'utf-8'}
r = requests.get(url, params = payload)

附加表單

與附加查詢參數類似,在 POST 請求中,可以附加表單信息,這一般用於實現登錄或提交信息等,使用一個字典作爲 data 參數即可:

payload = {'username':'username', 'password':'passwd'}
r = requests.post(url, data = payload)

讀取與設置響應數據的編碼

一般情況下 requests 均能從響應頭部獲得正確的編碼,不過若頭部沒有相應信息,則需要手動設置,不然可能會出錯。使用 Response 的 encoding 屬性即可:

r = requests.get()
f.write(r.text, encoding = r.encoding)
r.encoding = 'gb2312'
r.encdoing = 'utf-8'

使用代理

使用一個字典作爲 proxies 參數即可,下面這段代碼演示了使用 ShadowSocks 作爲代理的方法:

proxies = {
  'http' : 'socks5://127.0.0.1:1080',
  'https': 'socks5://127.0.0.1:1080'
}
r = requests.get(url, proxies=proxies)

獲取響應狀態碼

使用 Response 的 status_code 屬性即可:

r = requests.get(url)
print(r.status_code)

自定義請求頭部

傳遞一個字典作爲 headers 參數即可:

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
r = requests.get(url, headers = header)

會話

會話可以跨請求保持某些參數,它也會在同一個 Session 實例發出的所有請求之間保持 cookies。使用如下方法新建一個會話:

s = requests.Session()

會話對象 s 具有主要的 Requests API 的所有方法。會話一般用於連續發起一系列請求的時候使用,它會自動處理 cookies 的問題,十分方便。

聲明:

本文於網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/vYDqCII3MHnUKtHtJp7jgQ