• python_requests笔记


    前言

    -requests是一个很实用的Python HTTP客户端库,使用起来比urllib简洁很多,可用于网络请求和网络爬虫等。

    • 在使用前我们需要导入《 pip install requests 》 库,安装完成后,我们就可以正常使用了

    一、GET请求

    1.最基本的GET请求

    import requests
    
    request = requests.get('http://httpbin.org/get')
    
    print(request.text)  # 返回响应的内容,unicode 类型数据
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.GET带参数请求

    • 第一种直接将参数放在url内
    import requests
    
    request = requests.get('http://httpbin.org/get?name=w&age=25')
    
    print(request.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 第二种参数填写在dict中,发起请求时params参数指定为dict
    import requests
    
    data = {
        'name': 'w',
        'age': '25'
        }
    
    request = requests.get('http://httpbin.org/get?', params=data)
    
    print(request.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二、POST请求

    1.最基本的POST请求

    import requests
    
    url = 'http://httpbin.org/'
    
    # 字典类型参数
    request = requests.post(url, data=data) 
    
    # json类型参数
    request = requests.post(url, json=data) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.POST带参数请求

    • 字典类型参数
    import requests
    
    url = 'http://httpbin.org/post'
    
    data = {
        'key1': 'value1',
        'key2': 'value2'
        }
    
    request = requests.post(url, data=data)
    
    print(request.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • json类型参数
    import requests
    
    url = 'http://httpbin.org/post'
    
    data = {
        'key1': 'value1',
        'key2': 'value2'
        }
    
    request = requests.post(url, json=data)
    print(request.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    三、其他请求方式

    import requests
    
    # 发送 DELETE 请求到指定 url
    request = requests.delete('http://httpbin.org/delete')
    
    # 发送 PATCH 请求到指定 url
    request_1 = requests.patch('http://httpbin.org/patch')
    
    # 发送 PUT 请求到指定 url
    request_2 = requests.put('http://httpbin.org/put')
    
    print(request.text)
    print(request_1.text)
    print(request_2.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    四、添加headers

    • 有时候不加headers发起请求时,服务器会直接拒绝或服务器错误等,这个时候我们加上headers就可以了(get和post加入headers方法一样)
    import requests
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"
        }
    
    request = requests.get('http://httpbin.org/get', headers=headers)
    
    print(request.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    五、response属性

    import requests
    
    response = requests.get('http://httpbin.org/get')
    
    print(response.status_code)  # 返回 http 的状态码
    print(response.url)  # 返回响应的 URL
    print(response.headers)  # 返回响应头,字典格式
    print(response.cookies)  # 返回一个 CookieJar 对象,包含了从服务器发回的 cookie
    print(response.text)  # 返回响应的内容,unicode 类型数据
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    六、解析json

    import requests
    import json
    
    request = requests.get('http://httpbin.org/get')
    
    # 方法一
    # 返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
    print(request.json())
    print(type(request.json()))
    
    # 方法二
    # json.loads()和request.json()是一个意思,都是打印出一个字典数据
    data = json.loads(request.text)
    print(data)
    print(type(data))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    七、获取二进制数据

    1、下载

    • 一般用来下载图片、视频和音频等
    import requests
    
    request = requests.get("http://httpbin.org/image/png")  # 将要下载的图片链接放这
    
    print(type(request.text), type(request.content))  # 类型分别是str和bytes
    
    print(request.text)
    
    print(request.content)  # 获取二进制数据的方法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 获取到文件后,我们应该如何保存了,我们可以使用下面的方法
    import requests
    import os
    
    
    def create_folder():
        '''创建文件夹'''
        folder_path = os.path.join(os.path.join(os.path.expanduser("~"), "Desktop"), "picture")
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)
    
        return folder_path
    
    
    def download_files():
        url = "http://httpbin.org/image/png"
        request = requests.get(url)
    
        # 存放路径和文件名称拼接
        file_Path = os.path.join(create_folder(), "1.png")
    
        # 方法一 ,此方法是将数据一次性写入内存,如果文件较大,会导致内存"卡死"
        with open(file_Path, "wb") as f:
            f.write(request.content)
    
        # 方法二,此方法是将文件分块写入,每次写入指定大小,建议使用此方法
        with open(file_Path, "wb") as f:
            # chunk是指定每次写入的大小,单位字节(B)
            for chunk in request.iter_content(chunk_size=1024):
                if chunk:
                    f.write(chunk)
    
    
    if __name__ == "__main__":
        download_files()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    2、显示进度条

    • 安装 pip install tqdm
    • tqdm方法
    
    # 例子一
    from tqdm import tqdm
    import time
    
    for i in tqdm(range(50)):
        time.sleep(0.1)
    
    # 例子二,带参数
    d = {'info': 100}
    # desc设置名称,ncols设置进度条长度.postfix以字典形式传入详细信息
    for i in tqdm(range(50), desc='下载中', ncols=90, postfix=d):
        time.sleep(0.1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 下载显示进度条
    from tqdm import tqdm
    import requests
    import os
    
    
    def create_folder():
        '''
        使用 os.path.expanduser("~") 方法获取用户主目录路径
        将获取到的用户主目录路径与 "Desktop" 文件夹名称和 "picture" 文件夹名称拼接起来
        如果该文件夹不存在,接下来的代码会判断并使用 os.makedirs() 方法递归地创建该文件夹
        '''
        folder_path = os.path.join(os.path.join(os.path.expanduser("~"), "Desktop"), "picture")
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)
    
        return folder_path
    
    
    def download_files():
        url = 'http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2'
        file_data = requests.get(url)
    
        # 获取文件大小,单位字节(B)
        if "content-length" in file_data.headers:
            content_size = int(file_data.headers["content-length"])
    
            # 截取文件名称
            filename = url.split("/")[-1]
    
            # 存放路径和文件名称拼接
            file_Path = os.path.join(create_folder(), filename)
    
            # 表示每个数据块的大小为 128 字节 (B)
            chunk_size = 128
            progress_bar = tqdm(total=content_size, unit='iB', unit_scale=True,
                                bar_format='{l_bar}{bar:50}{r_bar}{bar:-10b}')
            with open(file_Path, 'wb') as file:
                for data in file_data.iter_content(chunk_size):
                    if data:
                        progress_bar.update(len(data))
                        file.write(data)
            progress_bar.close()
    
    
    if __name__ == "__main__":
        download_files()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    八、上传文件

    import requests
    
    files = {"file": open("C:/Users/admin/Desktop/download/1.png", 'rb')}
    
    request = requests.post("http://httpbin.org/post", files=files)  # 需要用post方法
    
    print(request .text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    九、超时设置

    import requests
    
    try:
        request = requests.get("http://httpbin.org", timeout=1)  # 超过1秒就算超时
    
        print(request .status_code)
    
    except Exception as f:
        print(f"请求超时:{f}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    十、认证设置

    • 有些网址需要用户名密码登录后才可以看到内容,方法如下:
    import requests
    
    request = requests.get("http://xxxxxx.com", auth=('user', 'possword'))
    
    print(request.status_code)
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Miracor Medical 宣布 PiCSO® 获得 FDA 试
    WinForm实现倒计时锁定程序完整源码附注释
    Flink热门商品统计
    LeetCode·每日一题·662.二叉树最大宽度·递归·迭代
    金九银十招聘季, APP测试面试题助你拿高薪Offer
    Vue组件之双向绑定v-model
    负载均衡架构设计技巧
    【问题思考】分布函数的极限【极限浅思】
    【附源码】计算机毕业设计SSM蔬菜水果销售网站
    【总结】maven 打包刷新下载依赖卡死
  • 原文地址:https://blog.csdn.net/qq_45664055/article/details/126776207