• Python——requests模块全解


    目录

            安装 requests

             常用属性,方法

            response.text和response.content的区别

    通过response.content进行decode,来解决中文乱码——

    发送带headers参数请求

            查看浏览器请求头

            发送带参数请求

             法一:网址中带参数

            法二:通过字典params构造参数字典

            在headers参数中携带cookie

            在字典中添加cookie参数

            timeout使用方法

    proxies代理参数的使用

            proxies使用方法 

    一,request全解

    此模块主要用于发送请求获取响应,代码简洁。

      安装 requests

    pip install requests

    常用属性,方法

    案例——通过requests向360导航首页发送请求,获取该页面源码

    import requests
    
    # 目标网址
    url = "https://hao.360.com/?src=lm&ls=n49dd49049f"
    
    # 发送请求获取响应
    response = requests.get(url)
    
    # 查看响应对象的类型
    print(type(response))
    # 查看响应状态码
    print(response.status_code)
    # 查看响应内容的类型
    print(type(response.text))
    # 查看cookies
    print(response.cookies)
    # 查看响应的内容
    print(response.text)

    输出——

    
    200
    
    ]>
    
    
    
    
    
    
    
    
    360导航_一个主页,整个世界
    
    
    

    response.text和response.content的区别

    response.text:

    ·类型:str

    ·解码类型:resquests模块自动根据HTTP头部对响应的编码作出有根据的推测,推测文本编码

    response.content:

       ·类型:bytes

    ·解码类型:无指定,执行挑选

    通过response.content进行decode,来解决中文乱码——

    ·response.content.decode():默认utf-8

    ·response.content.decode('GBK')

    常见编码字符集

    ·utf-8

    ·gbk

    ·asci

    ·iso-8859-1

    案例——

    import requests
    
    # 目标网址
    url = "https://www.taobao.com/"
    
    # 发送请求获取响应
    response = requests.get(url)
    
    # 手动设置编码格式
    response.encoding = 'utf8'
    # 打印源码的str类型数据
    print(response.text)
    
    # response.content是存储的bytes类型的响应数据,进行decode操作
    print(response.content.decode('utf-8'))

    输出——

    
    
    
      
      
      
      淘宝网 - 淘!我喜欢
      
      
      
      
      

    发送带headers参数请求

    查看浏览器请求头

    右键——检查——Network——User-Agent,复制即可

    方法解释

    requests.get(ur1, headers=headers)

    ·headers参数接收字典形式的请求头

    ·请求头字段名作为key,字段对应的值作为value

    代码示例

    import requests
    
    # 目标网址
    url = "https://www.taobao.com/"
    
    # 构建请求头字典,最重要的就是User-Agent
    # 如果需要其他请求头,就在headers字典中加上
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
    
    # 发送请求获取响应
    response = requests.get(url,headers=headers)
    
    print(response.text)

    输出——整个网页源码(截取显示)

    男士外套
          
        
          
          墙纸

    发送带参数请求

    如何删除网页地址中多余参数

    ·浏览器搜:猫,显示的url很复杂

    ·一个个删除参数并刷新,得到

    法一:网址中带参数

    import requests
    
    # 目标网址
    url = "https://www.baidu.com/s?wd=python"
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
    
    # 发送请求获取响应
    response = requests.get(url,headers=headers)
    
    print(response.text)

    法二:通过字典params构造参数字典

    import requests
    
    # 目标网址
    url = "https://www.baidu.com/s?"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
    
    # 请求参数是一个字典
    kw = {'wd': 'python'}
    
    # 发送请求的时候设置参数字典,获取响应
    response = requests.get(url, headers=headers, params=kw)
    
    print(response.text)

    在headers参数中携带cookie

    网站经常利用请求头中的cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加cookie,模拟普通用户请求。 Cookie具有时效性,一段时间后需要更换

    如图找到对应Cookie并复制

    在字典中添加cookie参数

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        'Cookie': 'BAIDUID=157D064FDE25DE5DD0E68AF62CBC3627:FG=1; BAIDUID_BFESS=157D064FDE25DE5DD0E68AF62CBC3627:FG=1; BIDUPSID=157D064FDE25DE5DD0E68AF62CBC3627; PSTM=1655611179; BD_UPN=12314753; ZFY=Cs:BflL5Del98YBOjx2EyRPzQE3QCyolFKzgVTguBEHI:C; BD_HOME=1; H_PS_PSSID=36548_36626_36673_36454_31254_36452_36690_36165_36693_36696_36569_36657_26350_36469; BA_HECTOR=85850gag05ak0l040h1hbg5st14; delPer=0; BD_CK_SAM=1; PSINO=7; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_645EC=0e08fXgvc5rDJVK1jRjlqmZ7pLp5r%2Fmn9jlENTs3CQ4%2FbhzUL09Y%2F%2FYtCGA; baikeVisitId=e10d7983-547d-4f34-a8d8-ec98dbcba8e4; COOKIE_SESSION=115_0_2_2_1_2_1_0_2_1_0_0_0_0_0_0_1655611189_0_1656233437%7C3%230_0_1656233437%7C1'
    }

    超时参数timeout

    上网时遇到网络波动,一个请求等了很长时间也可能没有结果,这会让整个项目的效率变得很低。这时需要请求强制停止,若没有在特定时间内返回结果则报错。

    timeout使用方法

    response = requests.get(ur1, timeout=3)

    3秒后无响应则抛异常

    实例——

    import requests
    
    # 目标网址
    url = "https://www.baidu.com/"
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    
    try:
        response = requests.get(url, headers=headers, timeout=5)  # 超时设置为5秒
    except:
        for i in range(4):  # 循环去请求网站
            response = requests.get(url, headers=headers, timeout=20)
            if response.status_code == 200:
                break
    html_str = response.text

    proxies代理参数的使用

    为了让服务器认为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,需要使用代理ip

    proxies使用方法

    response = requests.get(url, proxies=proxies)

    proxies的形式:字典

    proxies = {
        "http": "http://12.34.5679:9527",
        "https": "https://12.34.5679:9527",
    }

    注意:当proxies字典中包含有多个键值对,发送请求时将按照url地址的协议来选择使用相应的代理ip。

    发送post请求

    requests模块发送post请求函数的其它参数与发送get请的参数完全一致

    语法

    response = requests.post(url, data) # data参数接收一个字典

    找data表单

    import requests
    
    url = "https://fanyi.so.com/"
    
    data = {
        'word': '鸟'
    }
    response = requests.post(url)
    print(response.text)
    E:\anaconda\envs\request\python.exe C:/Users/Administrator/PycharmProjects/request/main.py
    
    
    
    
        
        
        
            360翻译    
        
        
        
        
        
    
    
    
        
        

    import requests
    
    url = "https://fanyi.baidu.com/"
    
    data = {
        'query': '爱'
    }
    response = requests.post(url)
    print(response.text)

    文章就到这啦,喜欢的给个关注与点赞哦,后续更多优质学习文章~

  • 相关阅读:
    Java面试--Java内存模型
    【5 树与二叉树】判断两个二叉树是否相同。
    5.【并查集】概念、代码实现、优化(Find优化、Union优化)
    【RISC-V】risc-v架构学习笔记(架构初学)
    HTML区块、布局
    金仓数据库KingbaseES客户端编程接口指南-ado.net(11. 等待通知)
    【优化版】DOSBox及常用汇编工具的详细安装教程
    Linux——Xshell、Xftp实现Linux远程登录与应用
    项目管理中,如何避免项目延期呢?
    粒子滤波 particle filter —从贝叶斯滤波到粒子滤波——Part-I(贝叶斯滤波)
  • 原文地址:https://blog.csdn.net/m0_59485658/article/details/126389335