1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?requests爬虫?>?当前文章

      requests爬虫

      requests二进制响应内容、json响应内容、原始响应

      2019-07-18 155赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。
        二进制响应内容


        你也能以字节的方式( r.content)访问请求响应体,对于非文本请求常用。以请求返回的二进制数据创建一张图片,你可以使用如下代码:

      # -*- coding: utf-8 -*-
      import requests
      
      def get_html(url,retry=2):
          try:
              r = requests.get(url=url, headers=headers,)
          except Exception as e:
              print(e)
              if retry > 0:
                  get_html(url, retry - 1)
          else:
              res = r.content
              return res
      
      
      if __name__ == "__main__":
          # 自定义请求头信息
          headers = {
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
          }
          url = 'http://www.zgsydw.com/statics/images/linkpic1.jpg'
          res = get_html(url)
          with open('aa.jpg','wb') as f:
              f.write(res)
      
      D:python3installpython.exe D:/python/py3script/test.py
      图片保存成功
      
      Process finished with exit code 0
      
      
      


        JSON 响应内容

        Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:

      # -*- coding: utf-8 -*-
      import requests
      
      def get_html(url,retry=2):
          try:
              r = requests.get(url=url, headers=headers,)
          except Exception as e:
              print(e)
              if retry > 0:
                  get_html(url, retry - 1)
          else:
              res = r.json()
              print(res)
      
      
      if __name__ == "__main__":
          # 自定义请求头信息
          headers = {
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
          }
          url = 'https://api.github.com/events'
          get_html(url)
      
      D:python3installpython.exe D:/python/py3script/test.py
      [{'id': '10036544214', 'type': 'PushEvent', 'actor': {'id': 52861026, 'login': '18086829907', 'display_login': '18086829907', 
      太长...省略...
      Process finished with exit code 0
      
      

        如果 JSON 解码失败,r.json()就会抛出一个异常。例如,响应内容是 401 (Unauthorized),尝试访问r.json()将会抛出ValueError:NoJSONobjectcouldbedecoded异常。

        需要注意的是,成功调用r.json()并**不**意味着响应的成功。有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节)。这种 JSON 会被解码返回。要检查请求是否成功,请使用r.raise_for_status()或者检查r.status_code是否和你的期望相同。

        原始响应内容

        在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了stream=True(下载大文件的时候)。具体你可以这么做:

      # -*- coding: utf-8 -*-
      import requests
      
      def get_html(url,retry=2):
          try:
              r = requests.get(url=url, headers=headers, stream=True)
          except Exception as e:
              print(e)
              if retry > 0:
                  get_html(url, retry - 1)
          else:
              res = r.raw
              return res
      
      
      if __name__ == "__main__":
          # 自定义请求头信息
          headers = {
              'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
          }
          url = 'https://api.github.com/events'
          content = get_html(url)
          print(content)
          data = content.read(10)
          print(data)
      
      D:python3installpython.exe D:/python/py3script/test.py
      <urllib3.response.HTTPResponse object at 0x000001D411283940>
      b"×1f×8b×08×00×00×00×00×00×00×03"
      
      Process finished with exit code 0
      
      
      


        但一般情况下,你应该以下面的模式将文本流保存到文件:

      # -*- coding: utf-8 -*-
      with open(filename, 'wb') as fd:
          for chunk in r.iter_content(chunk_size):
              fd.write(chunk)
      

        使用Response.iter_content将会处理大量你直接使用Response.raw不得不处理的。 当流下载时,上面是优先推荐的获取内容方式。chunk_size根据需要设置大小。

      文章评论

      requests二进制响应内容、json响应内容、原始响应文章写得不错,值得赞赏
      国产99视频精品免视看6