requests模塊的使用

寫在前面的話:

  在學習爬蟲入門時,會經常使用到requests模塊,熟悉這個模塊的使用須要熟悉http,https ,及瀏覽器的請求原理。初次接觸爬蟲時瞭解下,掌握瀏覽器的請求過程和爬蟲的本質,學起來就輕鬆多啦。
python

 

何時用get / post ?

# get 
response = requests.get(url, headers=headers)

# get 帶參數
requests.get(url, params=kw , headers=headers)
 
# post
response = requests.post(url, data=data, headers=headers)

 # get  請求放在請求頭裏,有請求頭 請求行  沒請求體
 # post  請求頭 請求行  請求體

  

1、requests模塊發送簡單的請求、獲取響應

需求:經過requests向百度首頁發送請求,獲取百度首頁的數據
response = requests.get(url)
response的經常使用屬性:
  • response.text              ----獲取響應體的二進制內容編碼後的內容 即str
  • respones.content           ----獲取響應體的二進制內容,即bytes (二進制字節字符串)
  • response.status_code
  • response.request.headers    ----根據響應獲取請求的headers
  • response.headers            ----響應的headers
  • response.url                 ------響應的url
  • response.request.url         ------根據響應獲取請求的url
 

注意:response.text 和response.content的區別

  • response.text
    • 類型:str
    • 解碼類型: 根據HTTP 頭部對響應的編碼做出有根據的推測,推測的文本編碼; 可能出現亂碼狀況
    • 如何修改編碼方式:指定 response.encoding=」utf-8」 
            • 指定  response.encoding='gbk'       (ubuntu環境下的linux系統)
  • response.content
    • 類型:bytes   (二進制字節字符串)
    • 解碼類型: 沒有指定
    • 如何修改編碼方式:response.content.deocde(「utf8」)  默認utf-8   
 
使用requests模塊發送帶headers的請求  ***
 
   headers形式的字典
      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"}

 爲何請求時要帶上header?

         模擬用戶操做,迷惑瀏覽器

用法

requests.get(url,headers=headers)
 
使用requests模塊 發送帶參數的請求   ****

參數的形式:字典

kw = {'wd':'長城'}

用法

requests.get(url,params=kw)
 
 
代理:
 
若是使用HTTPS代理    參數記得加上verify=False,由於https是一種加密傳輸、身份認證的網絡協議
verify=False  表示對證書的有效性不做驗證
 
 

二 、requests模塊處理(攜帶)cookie請求的3種方式

第1種:使用session類

  • requests 提供了一個叫作session類,來實現客戶端和服務端的會話保持
  • 會話保持有兩個內涵:
    • 保存cookie 在session中
    • 實現和服務端的長鏈接
  • 使用方法:
# 建立 session實例
 
# get請求
session = requests.session()
response = session.get(url,headers)
 
# post請求
session = requests.session()
response = session.post(post_url, data=post_data , headers=headers) 
        session實例在請求了一個網站後,對方服務器設置在本地的cookie會保存在session中,下一次再使用session請求對方服務器的時候,會帶上前一次的cookie
 

第2種:把cookie放在headers中

        注意:cookie有過時時間
    
       在這個位置放置的cookie以鍵值對的形式,以 ;加一個空格 隔開
 
 

第3種 :使用cookies參數有2種方式

 
3.1  第一種
  • cookies的形式:字典
cookies = {"cookie的name":"cookie的value"}
  • 使用方法:
  • 把cookie字典交給cookies 來處理
requests.get(url,headers=headers,cookies=cookie_dict}
 
  字典推導式
>>> {i:i+10 for i in range(10)}
{0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}
 
>>> {i:i+10 for i in range(10) if i%2 == 0}
{0: 10, 2: 12, 4: 14, 6: 16, 8: 18}
# 準備cookie形式的字典
# cookie_dict = { i for i in cookie.spilt("; " )}
 
cookie_dict = {i.split("=")[0]: i.split("=")[1] for i in cookie.split("; ")}
 
response = requests.get(url, headers=headers, cookies=cookie_dict)

  

3.2    第二種      requests.utils.dict_from_cookiejar:把cookiejar對象轉化爲字典
 
# coding="utf-8"
import requests
  
url = "http://www.baidu.com"
 
response = requests.get(url)
print(type(response.cookies))   
 
---輸出結果以下:   
---<class 'requests.cookies.RequestsCookieJar'>
 
 
# 把cookiejar對象轉化爲字典
cookies = requests.utils.dict_from_cookiejar(response.cookies)
print(cookies)
 
---輸出結果以下:
---{'BDORZ': '27315'}
 

   

超時參數的使用

第1種方式:timeoutlinux

response = requests.get(url,timeout=3)
 
第二種方式:retrying 模塊的使用 ----比timeout更好用,在代碼中能夠實現刷新
 
from retrying import retry
 
@retry(stop_max_attempt_number=3)   # 最大嘗試鏈接次數
def _parse_url(url):
    """加上一個下劃線表示該方法僅能在當前模塊內使用"""
    # print("-----------")
    response = requests.get(url, headers=headers, timeout=3)
    assert response.status_code == 200
    
    return response
相關文章
相關標籤/搜索