天天看點

Python爬蟲中Requests的使用

Requests

  • HTTP for Humans,更簡潔更友好
  • 繼承了urllib的所有特征
  • 底層使用的是urllib3
  • 開源位址: 開源位址
  • 中文文檔: 中文文檔
  • 安裝: conda install requests
  • get請求
    • requests.get(url)
    • requests.request(“get”, url)
    • 可以帶有headers和parmas參數
import requests

url = "http://www.baidu.com"
# 兩種請求方式
# 使用get請求
rsp = requests.get(url)
print(rsp.text)

# 使用request請求
rsp = requests.request("get", url)
print(rsp.text)

           
  • get傳回内容
'''
使用參數headers和params
研究傳回結果

'''

import requests

# 完整通路url是下面url加上參數構成
url = "http://www.baidu.com/s?"

kw = {
    "wd": "王八蛋"
}

headers = {
    "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36"
}
rsp = requests.get(url, params=kw, headers=headers )

print(rsp.text)         # 傳回首頁html
print(rsp.content)      # 傳回bytes流
print(rsp.url)          # 傳回請求網址,編碼後的
print(rsp.encoding)     # 傳回編碼方式
print(rsp.status_code) # 請求傳回碼
           
  • post
    • rsp = requests.post(url, data=data)
    • date, headers要求dict類型
  • proxy
    proxies = {
          "http":"address of proxy",
          "https": "address of proxy"
          }
          
          rsp = requests.request("get", "http:xxxxxx", proxies=proxies)
               
    • 代理有可能報錯,如果使用人數多,考慮安全問題,可能會被強行關閉
  • 使用者驗證
    • 代理驗證
      #可能需要使用HTTP basic Auth, 可以這樣
        # 格式為  使用者名:密碼@代理位址:端口位址
        proxy = { "http": "china:[email protected]:4444"}
        rsp = requests.get("http://baidu.com", proxies=proxy)
                 
  • web用戶端驗證
    • 如果遇到web用戶端驗證,需要添加auth=(使用者名,密碼)
      autu=("test1", "123456")#授權資訊
        rsp = requests.get("http://www.baidu.com", auth=auth)
                 
  • cookie
    • requests可以自動處理cookie資訊
      rsp = requests.get("http://xxxxxxxxxxx")
          # 如果對方伺服器給傳送過來cookie資訊,則可以通過回報的cookie屬性得到
          # 傳回一個cookiejar執行個體
          cookiejar = rsp.cookies   
          
          
          #可以講cookiejar轉換成字典
          cookiedict = requests.utils.dict_from_cookiejar(cookiejar)         
                 
  • session
    • 跟伺服器端session不是一個東東
    • 模拟一次會話,從用戶端浏覽器連結伺服器開始,到用戶端浏覽器斷開
    • 能讓我們跨請求時保持某些參數,比如在同一個session執行個體發出的 所有請求之間保持cookie
      # 建立session對象,可以保持cookie值
        ss = requests.session()
        
        headers = {"User-Agetn":"xxxxxxxxxxxxxxxxxx"}
        
        data = {"name":"xxxxxxxxxxx"}
        
        # 此時,由建立的session管理請求,負責送出請求,
        ss.post("http://www.baidu.com", data=data, headers=headers)
        
        rsp = ss.get("xxxxxxxxxxxx")
                 
  • https請求驗證ssl證書
    • 參數verify負責表示是否需要驗證ssL證書,預設是True
    • 如果不需要驗證ssl證書,則設定成False表示關閉
      rsp = requests.get("https://www.baidu.com", verify=False)
        # 如果用verify=True通路12306,會報錯,因為他證書有問題