1. 程式人生 > 其它 >python網路請求requests庫

python網路請求requests庫

requests庫

雖然Python的標準庫中 urllib模組已經包含了平常我們使用的大多數功能,但是它的 API 使用起來讓人感覺不太好,而 Requests宣傳是 “HTTP for Humans”,說明使用更簡潔方便。

安裝和文件地址:

利用pip可以非常方便的安裝:

pip install requests

中文文件:http://docs.python-requests.org/zh_CN/latest/index.html
github地址:https://github.com/requests/requests

pycharm教程地址:https://vrg123.com/

傳送GET請求:

  1. 最簡單的傳送get

    請求就是通過requests.get來呼叫:

    response = requests.get("http://www.baidu.com/")
    
  2. 新增headers和查詢引數:
    如果想新增 headers,可以傳入headers引數來增加請求頭中的headers資訊。如果要將引數放在url中傳遞,可以利用 params 引數。相關示例程式碼如下:

     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請求:

  1. 最基本的POST請求可以使用post方法:

    response = requests.post("http://www.baidu.com/",data=data)
    
  2. 傳入data資料:
    這時候就不要再使用urlencode進行編碼了,直接傳入一個字典進去就可以了。比如請求拉勾網的資料的程式碼:

     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引數就可以了。示例程式碼如下:

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:

如果在一個響應中包含了cookie,那麼可以利用cookies屬性拿到這個返回的cookie值:

import requests

url = "http://www.renren.com/PLogin.do"
data = {"email":"[email protected]",'password':"pythonspider"}
resp = requests.get('http://www.baidu.com/')
print(resp.cookies)
print(resp.cookies.get_dict())

session:

之前使用urllib庫,是可以使用opener傳送多個請求,多個請求之間是可以共享cookie的。那麼如果使用requests,也要達到共享cookie的目的,那麼可以使用requests庫給我們提供的session物件。注意,這裡的session不是web開發中的那個session,這個地方只是一個會話的物件而已。還是以登入人人網為例,使用requests來實現。示例程式碼如下:

import requests

url = "http://www.renren.com/PLogin.do"
data = {"email":"[email protected]",'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證書:

對於那些已經被信任的SSL整數的網站,比如https://www.baidu.com/,那麼使用requests直接就可以正常的返回響應。示例程式碼如下:

resp = requests.get('http://www.12306.cn/mormhweb/',verify=False)
print(resp.content.decode('utf-8'))