1.简单粗暴来讲:

text 返回的是unicode 型的数据,一般是在网页的header中定义的编码形式。

content返回的是bytes,二级制型的数据。

如果想要提取文本就用text

但是如果你想要提取图片、文件,就要用到content

2.详细一点来讲:

用了request.get方法后,返回一个response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等。

其中返回的网页部分会存在.content和.text两个对象中。如果需要获得这些网页原始数据,我们可以通过r.text 或 r.content来获取数据。

  • .text 存的是.content 编码后的字符串
  • .content中间存的是字节码

一般来说 .text直接用比较方便,返回的是字符串,但是有时候会解析不正常,导致返回的是一堆乱码。这时需要用.content.decode('utf-8'),使其正常显示。

总的来说.text是现成的字符串,.content还要编码,但是.text不是所有时候显示都正常(需要用.content.decode()进行手动编码)

3.举栗子

3.1 例一 r.text

输入:

import requests
response = requests.get("http://m.news.cctv.com/2019/09/12/ARTI80tyFZxlGernTG2Wljf7190912.shtml")
print(response.text)
print("Finish!")

输出结果:

   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="filetype" content="1">
<meta name="publishedtype" content="1">
<meta name="pagetype" content="1"> <meta name="author" content="å¼ æ…§å½¬">
<meta name="source" content="央视新闻客户端">
<title>时政新闻眼丨庆祝新中国成立70å‘¨å¹´å‰å¤•ï¼Œä¹ è¿‘å¹³ä¸ºä½•è§†å¯Ÿè¿™ä¸ªåœ°æ–¹ï¼Ÿ_央视新闻客户端_央视网(cctv.com)</title>
var commentTitle = "时政新闻眼丨庆祝新中国成立70å‘¨å¹´å‰å¤•ï¼Œä¹ è¿‘å¹³ä¸ºä½•è§†å¯Ÿè¿™ä¸ªåœ°æ–¹ï¼Ÿ"; //è¯„è®ºæ ‡é¢˜
/* 评论对象ID 20位以内的字符串 每个被评论对象不同20120420------ */(此处省略一万字) </script>
<!--Gridsum tracking code end. -->
</body>
</html>
Finish!

明显看到有乱码出现,在例三解决。

3.2 例二 r.content

输入:

import requests
response = requests.get("http://m.news.cctv.com/2019/09/12/ARTI80tyFZxlGernTG2Wljf7190912.shtml")
print(response.content)
print("Finish!")

输出结果:

b'   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html xmlns="http://www.w3.org/1999/xhtml">\r\n<head>\r\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\r\n<meta name="filetype" content="1"> \r\n<meta name="publishedtype" content="1"> \r\n<meta name="pagetype" content="1"> \r\n\r\n<meta name="author" content="\xe5\xbc\xa0\xe6\x85\xa7\xe5\xbd\xac"> \r\n<meta name="source" content="\xe5\xa4\xae\xe8\xa7\x86\xe6\x96\xb0\xe9\x97\xbb\xe5\xae\xa2\xe6\x88\xb7\xe7\xab\xaf"> \r\n\r\n\r\n<title>\xe6\x97\xb6\xe6\x94\xbf\xe6\x96\xb0\xe9\x97\xbb\xe7\x9c\xbc\xe4\xb8\xa8\xe5\xba\x86\xe7\xa5\x9d\xe6\x96\xb0\xe4\xb8\xad\xe5\x9b\xbd\xe6\x88\x90\xe7\xab(此处省略一万字)ript type=\'text/javascript\'>\r\n    (function () {\r\nvar s = document.createElement(\'script\');\r\ns.type = \'text/javascript\';\r\ns.async = true;\r\ns.src = (location.protocol == \'https:\' ?\'https://ssl.\' : \'http://static.\') + \'gridsumdissector.com/js/Clients/GWD-002757-56B3A5/gs.js\';\r\nvar firstScript = document.getElementsByTagName(\'script\')[0];\r\nfirstScript.parentNode.insertBefore(s, firstScript);\r\n    })();\r\n</script>\r\n<!--Gridsum tracking code end. -->\r\n</body>\r\n</html>'
Finish!

与r.text相比,多了b开头,这是bytes的标志哟(字节字符串),要用的话还要编码一下。

3.3 例三 r.text出现乱码,怎么解决(例一作乱码示范)

输入:

import requests
response = requests.get("http://m.news.cctv.com/2019/09/12/ARTI80tyFZxlGernTG2Wljf7190912.shtml")
print(response.content.decode('utf-8'))
print("Finish!")

输出结果:

   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="filetype" content="1">
<meta name="publishedtype" content="1">
<meta name="pagetype" content="1"> <meta name="author" content="张慧彬">
<meta name="source" content="央视新闻客户端"> <title>时政新闻眼丨庆祝新中国成立70周年前夕,xxx为何视察这个地方?_央视新闻客户端_央视网(cctv.com)</title>
<meta name="catalogs" content="PAGE137(此处省略一万字)
</script>
<!--Gridsum tracking code end. -->
</body>
</html>
Finish!

与例一对比,这里用了.content.decode('utf-8')后就没有乱码啦,get到了吗?

3.4 例四 r.content() 打开图片,写入相关数据

输入:

import requests
response = requests.get("http://b-ssl.duitang.com/uploads/item/201707/20/20170720111208_EHX2K.jpeg")
with open("love_img.jpeg","wb") as f:
f.write(response.content)
print(response.content)
print("Finish!")

输出结果:

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x03\x02\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\n\x0(省略一万字)\xdf\x93\xff\x00Cj(\xa6#\xa7P6t\xedQ\x1e\xa6\x8a(\x01(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00(\xa2\x8a\x00\xff\xd9'

Finish!

3.4 例四 用r.text() 看图片,将出现乱乱乱码

输入:

import requests
response = requests.get("http://b-ssl.duitang.com/uploads/item/201707/20/20170720111208_EHX2K.jpeg")
print(response.text)
print("Finish!")

输出结果:

�����JFIF���������C�

�����"��������������
�������}�!1AQa"q2���#B��R��$3br�
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz�����������������������������������������������������������������������������������
������w�!1AQaq"2�B���� #3R�br�(此处省略一万字)
?ߓ��Cj(�#�P6t�Q��((���(���(���(���(���(���(���(���(���(���(���(���(���(�����
Finish!

好的,你get到了吗?

又是一年中秋,月是故乡明,祝大家中秋快乐,家庭幸福。

Python获取爬虫数据, r.text 与 r.content 的区别的更多相关文章

  1. pyhon-request之repsonse的常用方法reponse.text和reponse.content的区别

    1. requests在python2 和 python3中通用,方法完全一样 2. request简单易用 requests的作用 作用:发送网络请求,返回响应数据 用法 response = re ...

  2. 070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  3. python网络爬虫-数据储存(七)

    数据储存 主要介绍两种数据储存方法: 储存在文件中,包括text文件和csv文件 存储在数据库中,包括MySQL关系型数据库和mongoDB数据库 存储到txt title = "第一个文本 ...

  4. python网络爬虫数据中的三种数据解析方式

    一.正则解析 常用正则表达式回顾: 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [0-9] \D : 非数字 \w :数字.字母.下划线 ...

  5. python获取Excel数据

    Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取 ...

  6. Python网络爬虫数据解析的三种方式

    request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...

  7. Python学习笔记(十五)用Python获取本地数据

    f1 = open(r'E:\Python\Data\data1.txt') #读取data1.txt文件,使用系统默认缓冲区大小, 为了读取快点,使用缓存吧! f = open(r'E:\Pytho ...

  8. Python scrapy爬虫数据保存到MySQL数据库

    除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...

  9. 解决ImmediateDeprecationError 用Python获取Yahoo数据

    最近正在看用 python 进行数据处理的内容,很多教程都会用 pandas 去抓取金融数据.我也尝试跑教程上的示例代码以抓取数据. 本文着重介绍遇到的问题以及解决方法. 注:我使用的是 Python ...

随机推荐

  1. docker 之网络配置

    Docker 网络实现 首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包:此外,如果不同子网之间要进行通信,需要路由机制. Docker 中的网络接口默认都是虚拟的接口 ...

  2. egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名

    egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...

  3. upload-labs 上传漏洞靶场环境以及writeup

    一个帮你总结所有类型的上传漏洞的靶场 https://github.com/c0ny1/upload-labs 靶场环境(基于phpstudy这个php集成环境) https://github.com ...

  4. NPOI OFFICE 2007 文件格式不被支持,读取异常

    在使用public XSSFWorkbook(FileInfo file) 时报文件格式不被支持,(读取异常/格式错误),根目录少了 ICSharpCode.SharpZipLib.dll . NPO ...

  5. [BJOI2019] 奥术神杖 [取log+AC自动机+dp]

    题面 传送门 思路 首先,看到这个乘起来开根号的形式,应该能想到用取$\log$的方式做一个转化: $\sqrt[n]{\prod_i a_i}=\frac{1}{n}\sum_i \log_b a_ ...

  6. PMP备考笔记--1.1

    题型 200道中英文单选题 基本概念题(%10) 过程工具/技术和输入输出题ITTO (%10) 情景题(%70) 计算题(3-5道题) 图 pmp四大挑战 试卷100页,题干长,阅读量大,考试4个小 ...

  7. linux c基础技巧

    C语言:向文件末尾进行追加数据https://blog.csdn.net/qq_31243065/article/details/82354557 https://zhidao.baidu.com/q ...

  8. 029 Android 轮播图广告Banner开源框架使用

    1.Banner介绍 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能. 2.使用环境配置(具体可见github开源项目) (1)添加依赖 在build.gradl ...

  9. SQL 先固定特殊的几行数据之外再按照某一字段排序方法(CASE 字段排序(CASE WHEN THEN)

    查询用户表的数据,管理员用户始终在最前面,然后再按照CreateTime排序: SELECT TOP * FROM [dbo].[User] WHERE ParentID = '**' ORDER B ...

  10. WUSTOJ 1326: Graph(Java)费马数

    题目链接:1326: Graph 参考博客:HNUSTOJ-1617 Graph(费马数)--G2MI Description Your task is to judge whether a regu ...