半個小時學會requests

半個小時學會requests

  • requests是python的網絡請求庫,有很是強大的功能。並且比urllib更加簡單、好用
  • requests 的安裝很是方便:直接pip直接安裝html

    pip install requests

    requests 的基本用法

  • 實現get請求python

    import requests
    
      r = requests.get('https://www.baidu.com')
      print(type(r))
      print(r.status_code)  # 重點 ,查看狀態嗎
      print(r.text)
      print(r.cookies)
  • 若是要在url附加額外的信息chrome

    data = {
          'name':'germey',
          'age':'22'
      }
      r = requests.get('http://httpbin.org/get',params = data)
      print(r.url)   
      # 這樣參數就很是簡單的添加到url裏面去了,用過 urllib的同窗應該知道,在urllib裏添加信息又要轉字節流。
      print(r.text)
      ##########################
      運行結果:
      http://httpbin.org/get?name=germey&age=22
      {
        "args": {
          "age": "22", 
          "name": "germey"
        }, 
        "headers": {
          "Accept": "*/*", 
          "Accept-Encoding": "gzip, deflate", 
          "Connection": "close", 
          "Host": "httpbin.org", 
          "User-Agent": "python-requests/2.18.4"
        }, 
        "origin": "121.17.176.240", 
        "url": "http://httpbin.org/get?name=germey&age=22"
      }
  • 咱們觀察上面的返回結果,發現結果是json格式的。可是它實際上的類型是 str類型。有麼有一種方法直接返回字典格式的結果。json

    print(type(r.text))
      print(r.json())
      print(type(r.json()))
      a = r.json()
      print(a['args'])
      # 這樣就能夠很方便的提取網頁中的 json 數據了。 可是要注意的是,若是返回結果不是json格式,就會出現解析錯誤。
      *******************************
      運行結果:
      <class 'str'>
      {'args': {'age': '22', 'name': 'germey'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}, 'origin': '121.17.176.240', 'url': 'http://httpbin.org/get?name=germey&age=22'}
      <class 'dict'>
  • 在服務端通常都會讀取網頁的 headers請求頭,若是發現請求頭爲一些網絡爬蟲的請求頭,就或拒絕訪問,以下:瀏覽器

    import requests
      r  = requests.get('https://www.zhihu.com/explore')
      print(r.text)
      '''
      看下面結果,就會發現給出了請求錯誤的提示信息
      '''
      ***************************
      <html>
      <head><title>400 Bad Request</title></head>
      <body bgcolor="white">
      <center><h1>400 Bad Request</h1></center>
      <hr><center>openresty</center>
      </body>
      </html>
  • 修改請求頭:
    • chrome 的請求頭cookie

      User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36
    • 火狐瀏覽器的請求頭網絡

      User-Agent:Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0
      
        *************************
        headers = {
        'User-Agent':'Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0'
        }
        r = requests.get('https://www.zhihu.com/explore',headers=headers)
        print(r.status_code)
        print(r.text)
        # 這樣咱們就能夠很是輕鬆的獲得知乎的結果了。
  • 抓取網絡上的圖片app

    import requests
    
      r = requests.get('https://www.autocar.co.uk/sites/autocar.co.uk/files/styles/gallery_slide/public/images/car-reviews/first-drives/legacy/911t-0357.jpg?itok=VJsdq9hv',timeout=2)
      with open('911.png','wb') as f:
          f.write(r.content)
      # 這張愛車的圖片就出如今你的文件夾裏了。
  • 使用post請求ide

    import requests
      data = {'name':'yang','age':'22'}
      r =requests.post('http://httpbin.org/post',data=data)
      print(r.text)
      print(r.url)
      # 咱們查看結果獲得,咱們post的結果已經顯示到了網頁當中。可是url並無發生任何變化,實際上是post是將數據寫在了請求體中發送過去的。
      ********************************
    
      {
        "args": {}, 
        "data": "", 
        "files": {}, 
        "form": {
          "age": "22", 
          "name": "yang"
        }, 
        "headers": {
          "Accept": "*/*", 
          "Accept-Encoding": "gzip, deflate", 
          "Connection": "close", 
          "Content-Length": "16", 
          "Content-Type": "application/x-www-form-urlencoded", 
          "Host": "httpbin.org", 
          "User-Agent": "python-requests/2.18.4"
        }, 
        "json": null, 
        "origin": "121.17.176.240", 
        "url": "http://httpbin.org/post"
      }
    
      http://httpbin.org/post
  • 響應:發送過去結果以後,一定會獲得響應。此外,還有不少別的方法來獲取其餘的信息,如狀態碼、響應頭、Cookies等post

    import requests
    
      r= requests.get('https://www.baidu.com')
      print(r.status_code)  # 返回狀態碼
      print(r.headers)    #返回headers頭
      print(r.cookies)    # 返回Cookies
      print(r.url)       # 返回url
      print(r.history)    # 返回請求歷史

    requests 的一些高級用法:

  • 文件上傳
    • 一下網站須要提交一些數據。假若有的網站須要上傳文件,咱們如何實現呢。

      import requests
        files = {'files':open('911.png','rb')}
        r = requests.post('http://httpbin.org/post',files=files)
        print(r.text)
        # 這樣咱們就上傳完成了文件
  • cookies:

    • 獲取cookies

      import requests
        headers = {
            'User-Agent':'Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0'
        }
        r = requests.get('https://www.baidu.com',headers=headers)
        for key,value in r.cookies.items():
            print(key +'='+value)
    • 使用cookie

      import requests
      
        headers = {
            'cookie': '_zap=aeac411e-6a5e-4dc6-abe3-ce7592902e65; _xsrf=LCk21sqrw5m5bghUuS4FgQkdNSKpSbZD; q_c1=de06444849884f7ba87c58d7178d3a3d|1535102667000|1535102667000; d_c0="ANCmU57jGg6PTpudGgCWcy8QRJFntSWIzEI=|1535102667"; tgw_l7_route=ec452307db92a7f0fdb158e41da8e5d8; capsion_ticket="2|1:0|10:1535617477|14:capsion_ticket|44:NGM2Y2VkOWUwMmExNGRiYmI4N2Y0NmYzZGY4MmJiNzE=|2d886e52a8c2987be5e9169b913e81f7010f4d32f4c8038fd4746e7b2a43b5b7"; z_c0="2|1:0|10:1535617486|4:z_c0|92:Mi4xYmZUVkF3QUFBQUFBMEtaVG51TWFEaVlBQUFCZ0FsVk56dmQwWEFCaFE2SzVRdnN2OHpNQTQtVzc5Z3NfWG1rTnJB|204923349accbf41e153d07746aab92b75ceab7f4b3b391bed36b2cb2d9f06fa"',
            'Host' :'www.zhihu.com',
            'User-Agent':"'User-Agent':'Mozilla/5.0 (X11; Ubuntu;) Gecko/20100101 Firefox/61.0'"
        }
        r = requests.get('https://www.zhihu.com',headers=headers)
        print(r.status_code)
        print(r.text)
        # 查看結果,就能夠看到登陸成功。
  • 回話維持,當你利用了 get或者 post等方法請求網頁的時候,實力上是打開了不一樣的回話,至關於
    你打開了不一樣的瀏覽器,咱們登陸以後,想獲取網頁信息,有不想獲取Cookie,這時候就用到了回話維持。

    import requests
      s= requests.Session()
      s.get('http://httpbin.org/cookies/set/number/789456123')
      r = s.get('http://httpbin.org/cookies')
      print(r.text)
  • 代理設置:
    • 在大規模爬去網頁中,會封禁ip或者調到登陸驗證。爲了防止這個狀況,咱們能夠就須要設置代

      import requests
      
        proxies = {
            'http':'http://192.168.0.1:5555',
            'https':'http://192.168.0.1:1085',
        }
        requests.get('https://www.taobao.com',proxies=proxies)

更多 方法參數官方文檔:http://docs.python-requests.org/

相關文章
相關標籤/搜索