雖然Python的標準庫中 urllib模塊已經包含了日常咱們使用的大多數功能,可是它的 API 使用起來讓人感受不太好,而 Requests宣傳是 「HTTP for Humans」,說明使用更簡潔方便。html
利用pip
能夠很是方便的安裝:python
pip install requests
中文文檔:http://docs.python-requests.org/zh_CN/latest/index.html
github地址:https://github.com/requests/requestsgit
最簡單的發送get
請求就是經過requests.get
來調用:github
response = requests.get("http://www.baidu.com/")
添加headers和查詢參數:
若是想添加 headers,能夠傳入headers參數來增長請求頭中的headers信息。若是要將參數放在url中傳遞,能夠利用 params 參數。相關示例代碼以下:web
import requests kw = {'wd':'中國'} headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} # params 接收一個字典或者字符串的查詢參數,字典類型自動轉換爲url編碼,不須要urlencode() response = requests.get("http://www.baidu.com/s", params = kw, headers = headers) # 查看響應內容,response.text 返回的是Unicode格式的數據 print(response.text) # 查看響應內容,response.content返回的字節流數據 print(response.content) # 查看完整url地址 print(response.url) # 查看響應頭部字符編碼 print(response.encoding) # 查看響應碼 print(response.status_code)
最基本的POST請求能夠使用post
方法:json
response = requests.post("http://www.baidu.com/",data=data)
傳入data數據:
這時候就不要再使用urlencode
進行編碼了,直接傳入一個字典進去就能夠了。好比請求拉勾網的數據的代碼:cookie
import requests url = "https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false&isSchoolJob=0" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36', 'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=' } data = { 'first': 'true', 'pn': 1, 'kd': 'python' } resp = requests.post(url,headers=headers,data=data) # 若是是json數據,直接能夠調用json方法 print(resp.json())
使用requests
添加代理也很是簡單,只要在請求的方法中(好比get
或者post
)傳遞proxies
參數就能夠了。示例代碼以下:session
import requests url = "http://httpbin.org/get" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36', } proxy = { 'http': '171.14.209.180:27829' } resp = requests.get(url,headers=headers,proxies=proxy) with open('xx.html','w',encoding='utf-8') as fp: fp.write(resp.text)
若是在一個響應中包含了cookie
,那麼能夠利用cookies
屬性拿到這個返回的cookie
值:ide
import requests url = "http://www.renren.com/PLogin.do" data = {"email":"970138074@qq.com",'password':"pythonspider"} resp = requests.get('http://www.baidu.com/') print(resp.cookies) print(resp.cookies.get_dict())
以前使用urllib
庫,是能夠使用opener
發送多個請求,多個請求之間是能夠共享cookie
的。那麼若是使用requests
,也要達到共享cookie
的目的,那麼能夠使用requests
庫給咱們提供的session
對象。注意,這裏的session
不是web開發中的那個session,這個地方只是一個會話的對象而已。仍是以登陸人人網爲例,使用requests
來實現。示例代碼以下:post
import requests url = "http://www.renren.com/PLogin.do" data = {"email":"970138074@qq.com",'password':"pythonspider"} headers = { 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" } # 登陸 session = requests.session() session.post(url,data=data,headers=headers) # 訪問大鵬我的中心 resp = session.get('http://www.renren.com/880151247/profile') print(resp.text)
對於那些已經被信任的SSL整數的網站,好比https://www.baidu.com/
,那麼使用requests
直接就能夠正常的返回響應。示例代碼以下:
resp = requests.get('http://www.12306.cn/mormhweb/',verify=False)
print(resp.content.decode('utf-8'))