• Python3之requests模块


    Python3之requests模块

     

      Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。

      发送GET请求

    1
    2
    3
    4
    import urllib.request
     
    = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
    result = f.read().decode('utf-8')

      发送携带请求头的GET请求

    1
    2
    3
    4
    5
    6
    7
    import urllib.request
     
    req = urllib.request.Request('http://www.example.com/')
    req.add_header('Referer''http://www.python.org/')
    = urllib.request.urlopen(req)
     
    result = f.read().decode('utf-8')

      更多内容点击查看官方文档

      Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。

    1. 安装模块

    1
    pip3 install requests

    2. 使用模块

      GET请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 1、无参数实例
      
    import requests
      
    ret = requests.get('https://github.com/timeline.json')
      
    print(ret.url)
    print(ret.text)
      
      
      
    # 2、有参数实例
      
    import requests
      
    payload = {'key1''value1''key2''value2'}
    ret = requests.get("http://httpbin.org/get", params=payload)
      
    print(ret.url)
    print(ret.text)

      POST请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # 1、基本POST实例
      
    import requests
      
    payload = {'key1''value1''key2''value2'}
    ret = requests.post("http://httpbin.org/post", data=payload)
      
    print(ret.text)
      
      
    # 2、发送请求头和数据实例
      
    import requests
    import json
      
    url = 'https://api.github.com/some/endpoint'
    payload = {'some''data'}
    headers = {'content-type''application/json'}
      
    ret = requests.post(url, data=json.dumps(payload), headers=headers)
      
    print(ret.text)
    print(ret.cookies)

      其他请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    requests.get(url, params=None**kwargs)
    requests.post(url, data=None, json=None**kwargs)
    requests.put(url, data=None**kwargs)
    requests.head(url, **kwargs)
    requests.delete(url, **kwargs)
    requests.patch(url, data=None**kwargs)
    requests.options(url, **kwargs)
      
    # 以上方法均是在此方法的基础上构建
    requests.request(method, url, **kwargs)

      更多requests模块相关文档点击查看

    3. Http请求和XML实例

    实例:检测QQ账号是否在线

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import urllib
    import requests
    from xml.etree import ElementTree as ET
     
    # 使用内置模块urllib发送HTTP请求,或者XML格式内容
    """
    f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
    result = f.read().decode('utf-8')
    """
     
     
    # 使用第三方模块requests发送HTTP请求,或者XML格式内容
    = requests.get('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
    result = r.text
     
    # 解析XML格式内容
    node = ET.XML(result)
     
    # 获取内容
    if node.text == "Y":
        print("在线")
    else:
        print("离线")

    实例:查看火车停靠信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import urllib
    import requests
    from xml.etree import ElementTree as ET
     
    # 使用内置模块urllib发送HTTP请求,或者XML格式内容
    """
    f = urllib.request.urlopen('http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=')
    result = f.read().decode('utf-8')
    """
     
    # 使用第三方模块requests发送HTTP请求,或者XML格式内容
    = requests.get('http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx/getDetailInfoByTrainCode?TrainCode=G666&UserID=')
    result = r.text
     
    # 解析XML格式内容
    root = ET.XML(result)
    for node in root.iter('TrainDetailInfo'):
        print(node.find('TrainStation').text,node.find('StartTime').text,node.tag,node.attrib)

      

  • 相关阅读:
    SpringMVC Controller介绍及常用注解
    spring Handler 映射
    如何更高效的对首页数据的展示
    设计表时给哪些字段加索引,索引的用处,以及能不能给所有字段加索引
    spring mybatis解决application.properties注入变量问题
    Spring配置中的id和name属性区分
    @RequestBody和@RequestParam区别
    SpringMVC中controller中方法返回类型为ResponseEntity乱码的问题
    扩展springMVC消息转换器来支持jsonp数据格式
    SpringMVC——消息转换器HttpMessageConverter
  • 原文地址:https://www.cnblogs.com/meng-wei-zhi/p/8258708.html
Copyright © 2020-2023  润新知