ajax后台返回数据中文乱码_实战:爬取中文网站遇到乱码时怎么办?

news/2024/5/20 5:11:12/文章来源:https://blog.csdn.net/weixin_39812533/article/details/112101208

阅读时间约8分钟

在爬取中文网站时,相信大家或多或少会遇到返回的是一堆乱七八糟、人类无法读懂的字符(如下图)。

abb1c8d3f71ed6b1eeb6f5103c69b6ee.png

刚入门的菜鸟可能花大量时间在网上各种搜索、或者各种尝试后仍然和原来一样,甚至有些人可能以为返回内容被加密了,花大量时间搜索与解密相关的内容,仍没有解决乱码的问题。

其实对于爬取内容出现乱码的原因,基本是使用错误编码将爬取内容(二进制字符)解码为字符串,只需使用正确编码就能将其转换为人类能正常读取的文字。

这个知识点可能大部分程序员都知道,但很多人不知道怎样处理爬取内容乱码的问题,本文将以requests库为例提供一种解决思路。

使用环境

  • requests 2.22

  • python 3.7.6

    注意: 如果没有安装requests库,需在命令行执行pip install requests进行安装

实战案例

话不多说,看下面的中文网站实例,在浏览器下所有文字都可以正常显示。

2a09af215965247077f61a8d393bb7f3.png

一般情况下,下面几行就能达到数据爬取的目的。

import requestsurl = 'https://www.chinanews.com/it/2020/12-17/9364291.shtml'headers = {    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17'}response = requests.get(url, headers=headers)

0001ab6589ad99493e6882bc40e62648.png

到这里代码没有错误提示,而且响应状态码也是200,大部分情况下可以使用lxml、beautiful soup或正则表达式等解析resposne.text返回的字符串。

但是本着谨慎的态度,使用response.text检查下返回的内容。

response.text# response.text  获取字符串形式的返回内容

9f461438dad8cd33f04432b779b9b9fe.png

怎么输出结果与预期不一致呢??其实这一堆乱码就是上文提到的使用错误编码解码二进制字符的结果。

那如何解决乱码的问题呢?眼尖的人或有经验的人会发现到meta标签有个charset属性。

74e2cc3cc48cd58d6b1f7564cc848089.png

那用这个属性值的编码,试试解码结果是怎样的。

response.content.decode('utf-8')# response.content  获取二进制形式的返回内容# resposne.content.decode()  用utf-8编码将二进制字符转换为字符串

7d21324e23af6426aad3a4984caeae2b.png

怎么出错了,难道编码不对吗?到这里不了解decode[1]语法的同学,可能又要在网上搜索一轮。

我们先看下官方文档关于decode语法的介绍。

bytes.``decode(encoding="utf-8", errors="strict")

bytearray.``decode(encoding="utf-8", errors="strict")

Return a string decoded from the given bytes.

Default encoding is 'utf-8'.

errors may be given to set a different error handling scheme.

The default for errors is 'strict', meaning that encoding errors raise a UnicodeError.

Other possible values are 'ignore', 'replace' and any other name registered via codecs.register_error(), see section Error Handlers.

重点关注第二个参数errors="strict",它是解码时出现异常的默认处理方式,它的特点是出现任何的解码异常都是直接抛出UnicodeError. 也就是说在处理过程有异常,无法继续处理。

我们留意到最后一句话Other possible values are `'ignore'`, `'replace'..., 用其中一个尝试下。

response.content.decode('utf-8', errors='replace')

8268dc223d71fedd3d49362be8700398.png

终于成功解码二进制返回内容了。但对于新手来说,需要掌握的知识点有点多,稍微忽略一些细节就马上出错了。有没有更加简答的方法呢?答案当然是有的。

在调用response.text属性前,先指定response.encoding属性。

response.encoding = 'utf-8'response.text

539b022ec1417b615cbd55be338b6441.png

总结

  • 爬取中文网站出现乱码最主要的原因是使用错误编码进行解码

  • 一般情况下,head标签里的是网页正确的编码,但并不是所有网页都是这样(下篇文章会介绍到,敬请留意)

  • 以requests为例,介绍了爬取中文网站出现乱码时的解决方法

仅仅两行代码就解决了因编码错误而造成的乱码问题。

response.encoding = 'utf-8'response.text

下篇文章将结合requests的官方文档和源码,深入分析request.text这一行代码为何这么强大、以及使用request.text需要注意什么。

参考资料

[1]  https://docs.python.org/3/library/stdtypes.html#bytes.decode 

欢迎搜索关注本号8a89df696554857349b171f5af805267.png8a89df696554857349b171f5af805267.png

21b5ef46051eed85101411c684e393fd.png

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java网站怎么启动_javaweb小项目如何启动一个Java Web应用

javaweb小项目如何启动一个Java Web应用1、查看自己下载的项目目录通过文件夹结构,你能够看出来你下载的是一个maven项目,还是一个非maven项目,是eclipse的,还是myeclipse的,或者idea的,这些信息会决定你的…

php做网站步骤_手机做网站建设的步骤有哪些?

手机做网站步骤相当于建立pc网站所采取的步骤,假如你建立属于自己的网站,那就需要一定的实力技巧,外加你要有一定的财力,我们就可以在互联网上查看数据,自己做,接下来让我们来看看移动网站建设的步骤有哪些…

swot分析模板_常用的办公模板哪里找?只要拥有这个网站,便能一键下载

作为职场人士,如果想在工作中脱颖而出,那你可能需要用到一些实用的办公网站,以此来提高工作效率,下面小编就介绍一个实用的办公网站给你们。一、常用办公模板1、Word模板首先【办公资源网】里面有海量的Word模板,比如简…

php企业网站带模块,DouPHP模块化企业网站管理系统(含小程序/公众号) v1.6 Release 20200818...

源码标题:DouPHP模块化企业网站管理系统(含小程序/公众号) v1.6 Release 20200818源码描述:授权方式:开源软件界面语言:简体中文文件大小:2.82 MB更新时间:2020-08-19资源类型:国产软件推荐等级…

修改网站首页批处理_网站改版后SEO应注意的问题

事实上,在一定程度上,网站不会被改版和升级,因为对于一个网站来说,改版有更多的东西需要注意,所以今天我们将分析网站改版应该注意什么。1、不要更换网站域名。网站更新版本后,请记住不要更改域名。这会丢失…

php团购实现,团购网站的设计与实现(PHP,MySQL)(含录像)

团购网站的设计与实现(,MySQL)(含录像)(任务书,开题报告,外文翻译,毕业论文14800字,程序代码,MySQL数据库,答辩PPT,答辩视频录像)摘 要随着电子技术和互联网以及移动互联网络的发展,信息技术以一种工具方式被引入到现在的商贸活动中,从而产生了电子商务(…

linux 建站命令,Linux 服务器建站新手教程(小白宝塔建站全流程)-不需要敲一行命令,...

Linux 服务器建站新手教程(小白宝塔建站全流程)-不需要敲一行命令,Linux 服务器配置、运行、不用敲命令WordPress 建站攻略——助力新手快速利用Linux系统建立属于自己的站点——给新手节省宝贵的时间,避免采坑!1Linux —— 一个非常轻便的系…

网站同时在线人数_数据监测网站“BiliOB”因侵权B站关闭

撰文 | 周敏萱内容总策划 | 郭 楠2020年11月10日,“BiliOB观测者”网站负责人“Jannchie见齐”于网站首页发布公告,宣布因收到哔哩哔哩侵权告知函,根据函件要求将于近期关闭网站并停止所有数据观测查询服务。(“BiliOB观测者”网站截图)“B…

能爬旅游景点数据的知名网站_【泽零一SEO】一文让你明白网站友链

友情链接作为网站不可缺少的组件,也是优化中很重要的一部分,全文900字,简单分享一下友情链接的知识一.友链链接的好处1.增加用户体验2.吸引蜘蛛友情链接本质是A标签,如果对方网站有你的网站友链,蜘蛛在爬取对方网站时会…

无法找到该证书的颁发者_如何查看网站正在使用的SSL证书品牌

打开一个网站,在其地址栏处有安全锁标志,地址栏以https://开头,就表示该域名拥有SSL证书。如果有人想知道您的站点用了哪个品牌的证书,在哪儿查看呢?首先,在地址栏输入拥有SSL证书的域名(网址),…

php添加公告代码,纯代码实现WordPress添加网站公告功能

有些网站会带有网站公告功能,可以发布活动及动态更新,这时候就需要在明显位置通知所有用户,今天分享一下纯代码实现WordPress添加网站公告功能,以下是具体实现方法:将以下代码插入主题function.php文件中。添加以下代码…

首页面太大怎么样快速加载_使用 CDN 加速网站加载

前几天找到一个看起来挺好看的主题,当然了,只是好看肯定没什么好说的。01不使用 CDN 使用本地文件的话,打开我的网站首页需要 4s 左右才能完全加载,使用上这个主题感觉访问速度快了好多好多,我的网站首页打开耗时在 0.…

网站后台服务器进不去,网站进不去后台有什么原因啊?急

因分析:这个提示是因为没有打开win2003的200k数据提交限制引起的。解决方法:windows2003系统下,上传较大的文件时,出现“request 对象 错误 asp 0104 : 80004005”错误。 更改win2003的iis 6.0对asp的上传文件大小为200k限制&am…

php网站 只显示sinsiu_5个常见的PHP面试问题

打破信息不对称,展现最真实的留学生活PHP是一种基于web的脚本语言,可用于生成网页和应用程序。随着越来越多的人和企业使用web,PHP也成为了企业开发人员的一项重要技能。在本文中,园长将带小伙伴们了解PHP面试中可能遇到的问题&am…

js调用mysql存储过程_mysql存储过程的使用案例_太平洋学习网|一个最全的javaweb,js,css,html5,csdn,android,linux的学习网站。...

mysql存储过程优点是执行效率非常快!因为存储过程是在数据库的服务器端执行的,缺点是移植性很差!不同数据库的存储过程是不能移植。为了便于理解,先看看student表的结构。1:查询student表所有数据的存储过程&#xff0…

java 图片幻灯片,不需要的java脚本图片幻灯片动画覆盖与网站 Headers

Problem/ Observation 我的图片幻灯片动画框位于固定 Headers 的正下方(这不是问题) . 当我第一次加载页面时,固定 Headers 和图片框之间没有叠加 . 但是,当我单击左右(下一个和上一个)箭头来更改图片时,图片的隐藏部分会显示,因此…

qoq是什么意思的缩写_CEO 和 SEO 都是职务名称吗?很多同学压根不懂是什么英文缩写...

英语有很多缩写,我们不需要每一个都弄明白,但是大家都懂的,你不懂也不行。就好比FYI 是for your information的简写,表示“供你参考,请知悉”,外企人人都懂;听到外企员工说天天OT,你…

wap网站源码 php,DIYWAP免费PHP手机网站管理系统 v6.3

DIYWAP_v6.3更新说明修复默认模板单页问题修复后台修改管理员账号后无法加载内容问题新增IIS URL重写规则新增Nginx重写规则新增自动Ping给百度新增广告分类新增友情链接分类DIYWAP手机网站系统是一套针对移动互联网开发的适用于手机的WAP网站系统,系统主要携带后台…

php网站系统mvc三层架构,MVC和三层架构区别?

MVC和三层架构区别?1、三层是基于业务逻辑来分的,而MVC是基于页面来分的;2、三层模式是体系结构模式,MVC是设计模式;3、三层模式又可归于部署模式,MVC可归于表示模式。三层架构三层架构(3-tier architectur…

建了个网站,可以下载每日bing壁纸

每日bing壁纸 地址 : http://www.rampage.xin/bing/