[Python] - 爬蟲之Requests基本使用

Requests 是一個非常強大的 HTTP 請求庫,基於 urllib,使網絡請求變的非常簡潔


官方文檔

Requests 官方文檔


安裝

利用 pip 安裝

$ pip3 install requests

利用 easy_install

easy_install requests


初步嘗試

首先我們引入一個小例子來感受一下

import requests

r = requests.get("http://www.baidu.com", )
print(type(r))
print(r.status_code)
print(r.encoding)
# print(r.text) print(r.cookies)
print(r.headers["content-type"])
# print(r.json())

基本請求

requests庫提供了http所有的基本請求方式

例如

r = requests.get("http://httpbin.org/get")
r = requests.post("http://httpbin.org/post")
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

一句話搞定


基本GET請求

最基本的GET請求可以直接用get方法

r = requests.get("http://httpbin.org/get")

如果想要加參數,可以利用 params 參數

import requests

params = {"username": "mazy", "password":"xxxx"}
r = requests.get("http://httpbin.org/get", params=params)
print(r.url) # http://httpbin.org/get?username=mazy&password=xxxx

請求JSON文件,可以利用 json() 方法解析

r = requests.get("http://httpbin.org/get")
print(r.text)
print(r.json())

如果想添加 headers,可以傳 headers 參數

params = {"username": "mazy", "password":"xxxx"}
headers = {'content-type': 'application/json'}
r = requests.get("http://httpbin.org/get", params=params, headers=headers)

基本POST請求

對於 POST 請求來說,我們一般需要爲它增加一些參數。那麼最基本的傳參方法可以利用 data 這個參數

import requests

params = {"username": "mazy", "password":"xxxx"}
r = requests.post("http://httpbin.org/post", data=params)
print(r.url)
print(r.text)

有時候我們需要傳送的信息不是表單形式的,需要我們傳JSON格式的數據過去,所以我們可以用 json.dumps() 方法把表單數據序列化

import requests
import json

params = {"username": "mazy", "password":"xxxx"}
r = requests.post("http://httpbin.org/post", data=json.dumps(params))
print(r.url)
print(r.text)

如果想要上傳文件,那麼直接用 file 參數即可

新建一個 a.txt 的文件,內容寫上 Hello World!

import requests

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

Cookies

cookies 變量來得到站點的 cookies

另外可以利用 cookies 變量來向服務器發送 cookies 信息

url = 'http://httpbin.org/cookies' 
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
print(r.text)

超時配置

可以利用 timeout 變量來配置最大請求時間

r = requests.get("http://httpbin.org/get", timeout=10)

會話對象

在以上的請求中,每次請求其實都相當於發起了一個新的請求。也就是相當於我們每個請求都用了不同的瀏覽器單獨打開的效果。也就是它並不是指的一個會話,即使請求的是同一個網址

import requests

s  =  requests.Session()
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r  =  s.get("http://httpbin.org/cookies")
print(r.text)

SSL證書驗證

現在隨處可見 https 開頭的網站,Requests可以爲HTTPS請求驗證SSL證書,就像web瀏覽器一樣。要想檢查某個主機的SSL證書,你可以使用 verify 參數

現在 12306 證書不是無效的嘛,來測試一下

import requests

r  =  requests.get('https://kyfw.12306.cn/otn/',  verify=True)
print(r.text)

報錯:

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

如果我們想跳過剛纔 12306 的證書驗證,把 verify 設置爲 False 即可

import requests

r  =  requests.get('https://kyfw.12306.cn/otn/',  verify=False)
print(r.text)

在默認情況下 verify 是 True,所以如果需要的話,需要手動設置下這個變量。


代理

如果需要使用代理,你可以通過爲任意請求方法提供 proxies 參數來配置單個請求

import requests

proxies = {"https" : "http://41.118.132.69:443"}
r = requests.post("http://httpbin.org/post", proxies=proxies)
print(r.text)

API

以上講解了 requests 中最常用的參數,如果需要用到更多,請參考官方文檔 API

Requests API 文檔

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