Python requests模块详解:快速上手指南(二十九)

目录

  • Python快速上手(二十九)-Python requests 模块详解
  • Python3 requests模块详解
  • 1. requests模块简介
  • 2. 基本用法
  • 3. 处理请求参数
  • 4. 处理响应
  • 5. 处理请求头
  • 6. 会话管理
  • 7. 文件上传
  • 8. 文件下载
  • 9. 超时设置
  • 10. 重定向与历史记录
  • 11. 异常处理
  • 12. 认证
  • 13. 高级用法
  • 14. 实际应用案例
  • Python快速上手(二十九)-Python requests 模块详解

    Python3 requests模块详解

    Python的requests模块是一个用于发送HTTP请求的流行库,它比内置的urllib库更易用且功能强大。requests模块提供了简单的API,可以处理复杂的HTTP请求,处理Cookie、会话、重定向等功能。本文将详细讲解requests模块的基本用法、发送请求、处理响应、会话管理、异常处理和实际应用案例。

    1. requests模块简介

    requests模块是一个用于发送HTTP请求的第三方库,支持HTTP/1.1,并且具有良好的支持和文档。要使用requests模块,首先需要安装它:

    pip install requests
    

    2. 基本用法

    2.1 发送GET请求
    发送GET请求是requests模块中最基本的操作,可以使用requests.get方法:

    import requests
    
    response = requests.get('https://api.github.com')
    print(response.status_code)  # 输出状态码
    print(response.text)  # 输出响应内容
    

    2.2 发送POST请求
    发送POST请求可以使用requests.post方法,并传递数据:

    import requests
    
    data = {'key': 'value'}
    response = requests.post('https://httpbin.org/post', data=data)
    print(response.status_code)
    print(response.json())  # 输出JSON响应内容
    

    3. 处理请求参数

    3.1 URL参数
    可以使用params参数来传递URL参数:

    import requests
    
    params = {'q': 'python', 'sort': 'stars'}
    response = requests.get('https://api.github.com/search/repositories', params=params)
    print(response.url)  # 查看完整的请求URL
    print(response.json())
    

    3.2 表单数据
    可以使用data参数来传递表单数据:

    import requests
    
    data = {'username': 'user', 'password': 'pass'}
    response = requests.post('https://httpbin.org/post', data=data)
    print(response.json())
    

    3.3 JSON数据
    可以使用json参数来传递JSON数据:

    import requests
    
    json_data = {'key': 'value'}
    response = requests.post('https://httpbin.org/post', json=json_data)
    print(response.json())
    

    4. 处理响应

    4.1 响应状态码
    可以使用status_code属性来获取响应的状态码:

    import requests
    
    response = requests.get('https://api.github.com')
    print(response.status_code)
    

    4.2 响应内容
    可以使用text属性来获取响应的文本内容,使用json方法来获取JSON格式的响应内容:

    import requests
    
    response = requests.get('https://api.github.com')
    print(response.text)
    print(response.json())
    

    4.3 响应头
    可以使用headers属性来获取响应头:

    import requests
    
    response = requests.get('https://api.github.com')
    print(response.headers)
    

    5. 处理请求头

    可以使用headers参数来设置请求头:

    import requests
    
    headers = {'User-Agent': 'my-app/0.0.1'}
    response = requests.get('https://api.github.com', headers=headers)
    print(response.status_code)
    

    6. 会话管理

    requests模块提供了会话对象,可以在多个请求之间保持某些参数:

    6.1 创建会话
    可以使用requests.Session创建会话对象:

    import requests
    
    session = requests.Session()
    response = session.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
    print(response.text)
    

    6.2 共享会话参数
    会话对象可以共享Cookies、头信息等参数:

    import requests
    
    session = requests.Session()
    session.headers.update({'User-Agent': 'my-app/0.0.1'})
    
    response = session.get('https://httpbin.org/headers')
    print(response.json())
    

    7. 文件上传

    可以使用files参数来上传文件:

    import requests
    
    files = {'file': open('report.txt', 'rb')}
    response = requests.post('https://httpbin.org/post', files=files)
    print(response.json())
    

    8. 文件下载

    可以使用requests.get方法并将响应内容写入文件来下载文件:

    import requests
    
    url = 'https://httpbin.org/image/png'
    response = requests.get(url)
    with open('image.png', 'wb') as file:
        file.write(response.content)
    print('File downloaded successfully')
    

    9. 超时设置

    可以使用timeout参数来设置请求超时时间:

    import requests
    
    try:
        response = requests.get('https://httpbin.org/delay/10', timeout=5)
    except requests.exceptions.Timeout:
        print('The request timed out')
    

    10. 重定向与历史记录

    requests会自动处理重定向,可以使用history属性查看重定向历史:

    import requests
    
    response = requests.get('http://github.com')
    print(response.url)
    print(response.history)
    

    11. 异常处理

    requests模块定义了一系列异常类,用于处理请求过程中可能发生的错误:

    import requests
    
    try:
        response = requests.get('https://httpbin.org/status/404')
        response.raise_for_status()  # 如果响应状态码不是200,抛出HTTPError
    except requests.exceptions.HTTPError as err:
        print('HTTP error occurred:', err)
    except requests.exceptions.ConnectionError as err:
        print('Connection error occurred:', err)
    except requests.exceptions.Timeout as err:
        print('Timeout error occurred:', err)
    except requests.exceptions.RequestException as err:
        print('An error occurred:', err)
    

    12. 认证

    12.1 基本认证
    可以使用auth参数进行基本认证:

    import requests
    from requests.auth import HTTPBasicAuth
    
    response = requests.get('https://httpbin.org/basic-auth/user/pass', auth=HTTPBasicAuth('user', 'pass'))
    print(response.json())
    

    12.2 其他认证方式
    requests模块还支持OAuth、JWT等其他认证方式,可以使用第三方库如requests-oauthlib来实现。

    13. 高级用法

    13.1 代理
    可以使用proxies参数来设置代理:

    import requests
    
    proxies = {
        'http': 'http://10.10.1.10:3128',
        'https': 'http://10.10.1.10:1080',
    }
    response = requests.get('https://httpbin.org/get', proxies=proxies)
    print(response.json())
    

    13.2 流式请求
    可以使用stream参数来进行流式请求,适用于下载大文件:

    import requests
    
    url = 'https://httpbin.org/stream/20'
    response = requests.get(url, stream=True)
    
    for line in response.iter_lines():
        if line:
            print(line)
    

    13.3 自定义适配器
    可以自定义HTTP适配器来控制底层的HTTP连接行为:

    from requests.adapters import HTTPAdapter
    from requests.packages.urllib3.util.retry import Retry
    
    class MyAdapter(HTTPAdapter):
        def send(self, request, **kwargs):
            print('Custom send method')
            return super().send(request, **kwargs)
    
    session = requests.Session()
    session.mount('https://', MyAdapter())
    response = session.get('https://httpbin.org/get')
    print(response.status_code)
    

    14. 实际应用案例

    14.1 API调用
    以下示例展示了如何使用requests模块调用GitHub API:

    import requests
    
    url = 'https://api.github.com/repos/psf/requests'
    response = requests.get(url)
    data = response.json()
    print(f"Repository: {data['name']}")
    print(f"Description: {data['description']}")
    print(f"Stars: {data['stargazers_count']}")
    print(f"Forks: {data['forks_count']}")
    

    14.2 网页抓取
    以下示例展示了如何使用requests模块抓取网页内容并使用BeautifulSoup进行解析:

    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://www.python.org'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    print('Page title:', soup.title.string)
    

    14.3 自动化表单提交
    以下示例展示了如何使用requests模块自动化提交表单:

    import requests
    
    url = 'https://httpbin.org/forms/post'
    data = {'name': 'John', 'email': 'john@example.com'}
    response = requests.post(url, data=data)
    print(response.json())
    

    作者:wu_xx_xx

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python requests模块详解:快速上手指南(二十九)

    发表回复