【Python】requests的response.text 和 urllib.request 的 response.read()的区别

news2024/9/27 9:27:54

刚写代码的时候,我经常会把requests 和 urllib下的request 包搞混,这两个请求响应的方法看起来很相似,但是写获取的方法是不一样的。

前者requests 是用response.text 来获取源码,而 urllib.request是用 response.read() 来获取html内容的,他们返回的响应内容也不一样,获取响应的状态码也会不一样。

如果搞混读取的方法,可能就会出现:【‘Response’ object has no attribute ‘read’】的问题:
在这里插入图片描述或者状态值获取不对时出现【‘Response’ object has no attribute ‘status’】的问题:在这里插入图片描述

具体的区别:

1. response.text

在Python的requests库中,它的使用示例如下:

# 使用response.text读取文本内容
import requests

# 发送GET请求
response = requests.get('https://example.com')

text_content = response.text
print('获取响应状态:',response.status_code)
print(type(text_content)) #str
print(text_content)

#==============结果:==================================
<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>    
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

requests库的response.text的特点:

  • 返回内容:返回的是解码后的【Unicode字符串】,str
  • 解码方法:它自动解码响应体,通常是使用响应头中的Content-Type和charset参数,自动选择合适的编码来解码响应内容。
  • 适用场景:这个方法通常用于读取文本内容,如HTML、JSON或XML。

2. response.read()

urllib.request模块的response.read()的特点:

  • 返回内容:返回响应体的【原始字节串】, bytes。
  • 解码方法:不进行任何解码,直接返回二进制数据。
  • 适用场景:它常用于读取非文本内容,如图片、视频或二进制文件。

它的使用示例如下:

# 使用response.read()读取原始字节数据
from urllib.request import urlopen

response=urlopen('https://example.com')
print('获取响应状态:',response.status)
binary_content = response.read()
print(type(binary_content)) #<class 'bytes'>
print(binary_content)
#==============结果:==================================
b'<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n    <meta charset="utf-8" />\n    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />\n    <meta name="viewport" content="width=device-width, initial-scale=1" />\n    <style type="text/css">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 2em;\n        background-color: #fdfdff;\n        border-radius: 0.5em;\n        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        div {\n            margin: 0 auto;\n            width: auto;\n        }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is for use in illustrative examples in documents. You may use this\n    domain in literature without prior coordination or asking for permission.</p>\n    <p><a href="https://www.iana.org/domains/example">More information...</a></p>\n</div>\n</body>\n</html>\n'

3.主要区别

  1. 解码:requests的response.text自动解码,而urllib.request的response.read()返回原始字节数据。

  2. 获取响应状态的方式:requests的是用status_code,而urllib.request的是status

  3. 易用性:requests提供了更高级的接口和更多的便利功能,如会话管理、Cookie持久化等; 而urllib.request提供了更多的控制和灵活性,但使用起来可能更复杂。

  4. 库的依赖:requests不是Python标准库的一部分,需要单独安装,通常被认为是更高级、更易用的HTTP库;而urllib.request是Python标准库的一部分,无需额外安装。

  5. 处理结果上:response.text可以直接对返回的字符串进行操作,比如解析JSON或HTML;
    而使用response.read()时,可能需要先将二进制数据转换为适当的格式,比如使用BytesIO来处理二进制数据,或者将其解码为字符串才能使用!

总之,我们在使用的过程中,大家要注意两者不要搞混了哈~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio Code搭建VUE开发环境

Vue.js 是一款易学易用&#xff0c;性能出色&#xff0c;适用场景丰富的 Web 前端框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;提供容易上手的 API 和一流的文档。可以用来开启PC网页、移动端网页页面、小程序等等 实验环境 VS Code 1.88.1Node 20.16.0Vue3.2…

社交及时通讯平台完整版源码,uniapp技术,可打包成app

源码简介&#xff1a; 全原生&#xff0c;从底层开始结构就完全不一样&#xff0c;mongodb的库&#xff0c;uniapp混编手端&#xff0c;二开难度要比视酷或者酷信容易很多。全开源&#xff0c;带开发文档。前端用的是uniapp技术&#xff0c;所以是多端合一&#xff0c;可以做h…

vue中openlayers过滤高亮显示某个图层

vue中openlayers过滤高亮显示某个图层 openlayers库没有直接支持这样设置&#xff0c;所以可以使用库&#xff1a;ol-ext&#xff0c;地址&#xff1a;https://viglino.github.io/ol-ext/examples/filter/map.filter.crop.html 效果&#xff1a; 关键代码&#xff1a; /**…

PCI多路复用开关模块、PCI总线开关卡—PCI2612

简介&#xff1a; 阿尔泰科技 PCI2612是一款独立性的中密度 PCI多路复用开关模块&#xff0c;该模块采用机电继电器&#xff0c;为承载大功率信号提供了出色的性能&#xff0c;同时具有低热偏移&#xff0c;可在低电压电平下进行精确测量。PCI2612还具有监测继电器的板载继电器…

Linux 调试器 —— gdb 的使用

Linux 调试器 —— gdb 的使用 前置条件debug 模式 和 release 模式gdb 下载 基础操作退出调试器查看源代码运行程序断点打断点查看断点取消断点关闭断点开启断点 单步执行逐过程逐语句 打印表达式值、变量值、地址等等单次查看常显示 运行至下一个断点处运行完所在函数&#x…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第4天

一&#xff0c;-div和span标签和字体实体 1.无语义的布局标签 作用&#xff1a;布局网页&#xff08;划分网页区域&#xff0c;摆放内容&#xff09; div:独占一行 span:不换行 <div>div标签&#xff0c;独占一行</div> <span>span 标签&#xff0c;不换行…

Transformer(二)

一、TNT模型 VIT只针对patch进行建模&#xff0c;忽略了其中更小的细节 TNT基本计算 内部transformer重组成新的向量新向量再通过全连接改变输出的特征大小内部组合后的向量与patch编码大小相同最后与原始输入patch向量相加 二、SwinTransformer 解决了哪些问题&#xff1a…

英特尔凌动® P5300 和 P5700 处理器使企业能够优化现代网络基础架构、安全加速器和存储设备之间的性能和成本平衡。

介绍英特尔凌动 P5300 和 P5700 处理器 英特尔凌动处理器提供核心数和硬件功能各异的多种配置&#xff0c;用于支持不同的边缘用例。基于 10 纳米工艺的先进微架构与一组强大的加速器相结合&#xff0c;带来卓越的每核性能和先进的数据包处理能力。这些平台基于高能效的系统级…

SQL Server 的透明数据加密

透明数据加密是SQL Server数据库安全众多特性中的一个&#xff0c;本文只针对透明数据加密。 在此测试之前&#xff0c;已经按照文档如何快速获得一个测试用SQL Server企业版创建了一个SQL Server 2019&#xff0c;并按照文档为SQL Server安装示例数据库AdventureWorks安装了…

Aspose.Words.dll 插入模板表格,使用的是邮件合并MailMerge功能,数据源是DataTable或list对象,实例

本实例中的实例功能有: 1、 Aspose.Words.dll 插入模板指定域替换为文字或html标签,见1 2、Aspose.Words.dll 插入模板表格,使用的是邮件合并MailMerge功能,数据源是DataTable或List对象(将list转换成DataTable),见1和2 3、word转换Pdf文件,见1 4、将多个word输出文…

PXE实现批量主机开机自动安装

华子目录 前言PXE装机的基本工作原理PXE组件实验前的准备工作1.VM进入虚拟网络编辑器关闭dhcp功能2.从RHEL7母机上克隆一个server端和client端3.配置server端4.关闭firewalld和selinux5.mobaxterm使用ssh -X连接到server端6.anaconda-ks.cfg介绍6.1文件概述6.2文件内容6.3文件使…

dbeaver 导入sql 报错,ERROR 2059 (HY000)

dbeaver 导入sql 报错。 C:\Users\admin\AppData\Roaming\DBeaverData\drivers\clients\mysql\win\mysql.exe --default-character-setutf8mb4 -u root --host222.85.214.245 --port11076 res_protect Task ‘MySQL script’ started at Wed Aug 07 16:31:58 CST 2024 ERROR 2…

【c++】基础知识——快速入门c++

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、手搓一个Hello World 二、命名空间namespace 1.命名空间的定义 2.命名空间的使用 3.命名空间补充知识 三、c中的输入和输出 四、缺省参…

哈哈哈日记

最近真的没有什么灵感更新&#xff0c;大家都在更啥呀!我就像天气一样时好时坏的&#xff0c;嘴上每天都是“好想死”&#xff0c;但是身体稍微有点不舒服立马就去看医生&#xff0c;委屈了啥都不能委屈自己&#xff0c;2块钱的矿泉水舍不得买&#xff0c;35一杯的咖啡我倒是看…

Pygame制作简单的跑酷游戏

今天我们来看看如何使用Pygame框架制作一个简单的跑酷游戏。这个游戏包含了基本的游戏元素,如玩家角色、障碍物、背景、音效等,可以作为入门Pygame游戏开发的一个不错的示例。 游戏概述 这是一个简单的横版跑酷游戏,玩家控制一个忍者角色,通过跳跃来躲避迎面而来的各种障碍物…

C++设计模式(代理模式)

1. 电话虫 在海贼中&#xff0c;有一种神奇的通信工具叫做电话虫&#xff08;Den Den Mushi&#xff09;&#xff0c;外形如蜗牛&#xff0c;身上带有斑点或条纹或通体纯色&#xff0c;壳顶上有对讲机或按键&#xff0c;不接通时会睡觉&#xff0c;接通时会惊醒&#xff0c;并发…

bpmn简单使用(制作流程图)

1、先下载依赖&#xff0c;下面是我下载的版本 "bpmn-io/properties-panel": "^3.23.0", "bpmn-js": "^17.9.1", "bpmn-js-properties-panel": "^5.6.1", "camunda-bpmn-moddle": "^7.0.1",…

【鸿蒙开发基础学习】HSP-应用程序包开发与使用

HSP - 应用程序包开发与使用 HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0…

【开端】web系统中返回状态码组织管理

一、绪论 http web系统接口返回状态码有很多中&#xff0c;包括行业内定的状态码 &#xff0c;比如200 表示成功&#xff0c;500表示服务器系统不可用&#xff0c;但是有包含很多业务上自定义的状态码。比如阿里&#xff0c;腾讯这些公司的产品会定义很多自己公司产品的状态码…

Spring全家桶(三):Spring AOP

Spring AOP面向切面编程 1.面向切面编程思维&#xff08;AOP&#xff09; 1.1.面向切面编程思想AOP AOP&#xff1a;Aspect Oriented Programming面向切面编程 AOP可以说是OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09;的补充和完善。O…