Requests模塊爬蟲

Requests:第三方封裝的用于網(wǎng)絡(luò)請(qǐng)求操作的一個(gè)模塊,主要用于爬蟲程序的開發(fā),尤其以開發(fā)簡(jiǎn)單,上手容易、操作靈活、開發(fā)效率高著稱,所以在實(shí)際項(xiàng)目操作過程中,requests模塊是使用最多的爬蟲操作模塊。

1. 安裝

    pip install requests
    #或者
    easy_install requests

簡(jiǎn)單爬蟲案例:

   #引入需要的模塊
   import requests
   #發(fā)送請(qǐng)求得到相應(yīng)數(shù)據(jù)
   response = requests.get("https://www.taobao.com")
   #打印展示獲取的數(shù)據(jù)
   print(response.text)

2. 各種設(shè)置

  • 2.1請(qǐng)求方式
    通過request直接調(diào)?用對(duì)應(yīng)的函數(shù)/?方法即可完成
    一般只有 requests.get 和 requests.post 。

  • 2.2 附帶普通參數(shù)的請(qǐng)求
    參數(shù)包含在?一個(gè)字典對(duì)象中,將字典對(duì)象交給requests的函數(shù)即可。

        # get 方式發(fā)送請(qǐng)求,包含參數(shù),用 params 接收
        res = requests.get(URL, params = data) 
        # post 方式發(fā)送請(qǐng)求,包含參數(shù) ,用 data 接收
        res = requests.post(URL, data = data)
    
  • 2.3 傳遞JSON參數(shù)
    在請(qǐng)求的過程中,有些URL接口需要的參數(shù)數(shù)據(jù)并不不是零散的數(shù)據(jù),而是需要封裝在一起的JSON數(shù)據(jù),此時(shí)數(shù)據(jù)需要轉(zhuǎn)化為json格式。

        # 引?入需要的模塊  
        imoprt json
        # 封裝參數(shù)的字典 
        data = {“city”:”鄭州”} 
        # 轉(zhuǎn)換參數(shù) 
        json_data = json.dumps(data) 
    
        get(url, json=..)--無效
        post(url, json=..)--常規(guī)操作[使用非常少],一般用data傳遞
    
  • 2.4 返回的數(shù)據(jù)和它編碼操作
    返回的數(shù)據(jù),可以根據(jù)數(shù)據(jù)的編碼類型區(qū)分為二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù),兩種不同的數(shù)據(jù)通過兩個(gè)不同的屬性進(jìn)行獲取。

    response.content:獲取響應(yīng)中包含的二進(jìn)制數(shù)據(jù) response.text:獲取響應(yīng)中包含的文本數(shù)據(jù)
    如果出現(xiàn)亂碼,可通過response的屬性encoding,
      進(jìn)行編碼的獲取和指定
    response.encoding = “編碼(utf-8)”

  • 2.5 文件上傳操作
    requests對(duì)象支持文件的數(shù)據(jù)流式處理,不需要將整個(gè)文件都加載到內(nèi)存中,而是讀取一部分傳遞一部分,將文件指定給requests請(qǐng)求的file參數(shù)即可。

    注意:文件的上傳操作只能通過post()請(qǐng)求方式執(zhí)行操作

      # 1.整個(gè)文件讀取
      import requests
      # 打開文件 
      f = open(“d:/test.txt”, “r”) 
      # 包裝文件參數(shù) 
      file = {“file”:f} 
      # 傳遞文件     
      response = requests.post(URL, files=file) 
    
      #2.流式數(shù)據(jù)傳遞方式
      import requests
      # 打開文件 
      with open(“d:/test.txt”, “r”) as f:    
          response = requests.post(URL, data=f) 
    
  • 2.6 cookie操作
    requests模塊中對(duì)cookie的操作進(jìn)行了封裝,可以直接通過響應(yīng)對(duì)象的cookie屬性進(jìn)行操作。

      import requests
      response = request(“http://www.badiu.com ” )  
      # 獲取整個(gè)cookie 
      print(response.cookies)
      # 根據(jù)key獲取指定的值
      print(r.cookies[“key”])
    
  • 2.7 請(qǐng)求超時(shí)設(shè)置
    如果要求對(duì)于數(shù)據(jù)操作性能有要求的話,可以通過傳遞timeout參數(shù)數(shù)據(jù)進(jìn)行超時(shí)時(shí)間的設(shè)置,超過超時(shí)時(shí)間的連接自動(dòng) 拋出異常。

      import requests
      response = requests.get(“http://github.com ” , timeout=0.1)
      異常信息:requests.exceptions.ConnectTimeout
    
  • 2.8 讓多個(gè)請(qǐng)求包含在一個(gè)會(huì)話中
    一般情況下,爬蟲操作獲取目標(biāo)數(shù)據(jù)都是短連接,也就是獲取數(shù)據(jù)時(shí)連接服務(wù)器,每次發(fā)起請(qǐng)求就是一個(gè)連接,獲取到服務(wù)器的響應(yīng)數(shù)據(jù)后連接自動(dòng)斷開,再次發(fā)起請(qǐng)求時(shí)又是一個(gè)新的請(qǐng)求對(duì)象了。

      import requests
      response1 =requests.get() 
      response2 = requests.get()
      #上面的代碼中,兩次請(qǐng)求就不是同一個(gè)會(huì)話。
      #如果要進(jìn)行多個(gè)請(qǐng)求包含在同一個(gè)會(huì)話中,
      #通過requests模塊的會(huì)話對(duì)象Session()構(gòu)建一個(gè)會(huì)話請(qǐng)求進(jìn)行操作即可。
      import requests
      req = requests.Session()
      response1 = req.get()
      response2 = req.get() 
    
  • 2.9 SSL證書設(shè)置
    讓爬蟲程序類似瀏覽器一樣驗(yàn)證https協(xié)議訪問的網(wǎng)站,當(dāng)網(wǎng)站的SSL無效時(shí),爬蟲無法訪問,需要關(guān)閉HTTPS的SSL證書驗(yàn)證,通過設(shè)置請(qǐng)求參數(shù)verify=False關(guān)閉該驗(yàn)證。

      response = requests.get(URL,verify=False)   
    
  • 2.10 代理設(shè)置
    和urllib2一樣,爬蟲操作過程中,代理的設(shè)置是不可避免的一種技術(shù)手段。在requests模塊中,通過將代理服務(wù)器端口配置在字典中,然后通過proxies參數(shù)進(jìn)行設(shè)置即可。

      import requests
      proxies = { "https":"122.72.32.75:80" } 
      response = requests.get(URL, proxies=proxies)
      print (response.text)
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Python入門網(wǎng)絡(luò)爬蟲之精華版 網(wǎng)址: https://github.com/lining0806/Python...
    ZHANG_GO閱讀 743評(píng)論 0 2
  • 一:requests概述 requests第三方封裝的模塊,通過簡(jiǎn)化請(qǐng)求和響應(yīng)數(shù)據(jù)的處理,簡(jiǎn)化繁瑣的開發(fā)步驟和處理...
    哈嘍小生閱讀 1,035評(píng)論 0 2
  • 目錄: Python網(wǎng)絡(luò)爬蟲(一)- 入門基礎(chǔ)Python網(wǎng)絡(luò)爬蟲(二)- urllib爬蟲案例Python網(wǎng)絡(luò)爬...
    一只寫程序的猿閱讀 13,141評(píng)論 17 68
  • 感覺上海的春天似乎馬上要過去了。今天4月2號(hào),天氣真是好的讓我沒法安心看書。美美的花,呼呼轉(zhuǎn)的風(fēng)車車,彩色的氣球,...
    Rivariva閱讀 257評(píng)論 0 2

友情鏈接更多精彩內(nèi)容