首页 > 编程语言 >下载小说时,python字符集编码utf-8和GBK的错误处理(慎!)

下载小说时,python字符集编码utf-8和GBK的错误处理(慎!)

时间:2024-08-24 10:57:34浏览次数:11  
标签:content utf 编码 python GBK write 报错 网页 错误处理

创作背景

    今天想找本小说看,但是居然只能在网页上能找到资源,作为一名测试工程师,这能忍?多么严重的体验,这还能一起愉快的玩耍了吗?还能好好摸鱼了吗?

    果断花点时间,查看页面结构,写个脚本自动请求网页,获取小说内容,并进行储存到本地txt文件中,放在手机里,躺在床上慢慢看。没想到,来回调试了好几次,o(╯□╰)o。

    好吧,工作都没这么热情,果然爱好才是第一生产力。\(^o^)/~

遇见问题

    大部分的网页都是utf-8编码,所以在进行请求和写入文件中时,不会出现乱码的问题。但不包括所有网页都是如此,有些网页会采用的GBK形式编码,这种情况下,网页正文内容中还使用如&nbsp形式来代替 【不换行空格】。当两者buff叠加,因为写入文件时,GBK编码不认识&nbsp,运行时会出现报错,导致中断。等了十几分钟,美滋滋准备打开文件看小说时,发现一章没下了,那种心情。家人们,谁懂啊,泪如雨下啊有木有。废话较多,进入正题。

原文

with open("123.txt", 'a', encoding="GBK") as f:
    f.write(a)
    f.write('\n')
    f.write(content)
    f.write('\n')

报错信息

Traceback (most recent call last):

    File "D:/pyproject/xiaoshuo/xiaoshuo2.py", line 215, in <module>

      f.write(content) UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 3: illegal multibyte sequence

修改后

with open("123.txt", 'a', encoding="GBK") as f:
    f.write(a)
    f.write('\n')
    try:
        f.write(content)
    except UnicodeEncodeError:
        # 如果遇到编码错误,则尝试转换编码
        encoded_content = content.encode('GBK', errors='replace')
        safe_content = encoded_content.decode('GBK').replace('????????', '\n')
        f.write(safe_content)
        f.write('\n')
    f.write('\n')

代码解释

content.encode('GBK', errors='replace')  表示将content对象以GBK形式进行编码,其中的错误以默认的字符进行替换(默认字符是?)

我这里经对比 页面结构和转换后的结果后,发现是引用了4个&nbsp,给我默认替换成了????????,为了下载后的结构美观,将其换成了换行空格

后续

之后,研究了下python的编译打包功能,生成了一个执行文件,双击即可使用,连pycharm编辑器都不用打开了,即输即用,后台运行。配上日志输出,发生错误时,记录报错问题便于后续排查和断点继续下载。w(゚Д゚)w,妈妈再也不用怕我看不了小说了。

下篇文章记录python的编译打包功能

标签:content,utf,编码,python,GBK,write,报错,网页,错误处理
From: https://blog.csdn.net/ad123_qwe/article/details/141495960

相关文章

  • python Logging 模块的日志参数配置及使用
    官方文档查看路径:logging---Python的日志记录工具—Python3.12.5文档步骤一:先建立log.conf文件步骤二:在基类文件中引用log.conf文件,并创建Logger日志记录器--步骤一-----------------------log.conf文件配置信息[loggers]keys=root,infoLogger[logger_root......
  • 十大免费的Python爬虫APP!再也不用开那么多会员了!
      在探讨十大网络爬虫免费App时,需要注意的是,并非所有提到的工具都完全免费或以App形式存在。不过,我可以根据当前可用的信息和市场情况,列出一些广受欢迎且部分功能可能免费的网络爬虫工具或软件,尽管其中一些可能主要是桌面应用或框架。以下是按照您的要求整理的列表:1.八爪......
  • Python编码系列—Python单元测试的艺术:深入探索unittest与pytest
    ......
  • Python脚本
    1.对目录下的文件进行分类,并根据文件后缀,将相应文件移动或拷贝至对应目录importsysimportosimportshutildefget_file_extension(filename):_,file_extension=os.path.splitext(filename)iffile_extension.startswith('.'):returnf......
  • Python的OpenCV转换图像大小
    在Python中,使用OpenCV库来转换图像大小是一个常见的操作,它可以帮助你调整图像到特定的尺寸,以适应不同的应用场景,比如图像预处理、模型输入等。下面是一个详细的代码示例,展示了如何使用OpenCV来转换图像的大小。首先,确保你已经安装了OpenCV库。如果还没有安装,可以通过pip安装:bash......
  • 【Python字典简析】
    Python字典简析Python字典(Dictionary)是一种可变的数据结构,用于存储键值对(key-valuepairs)。它具有以下特点:无序性:在Python3.6之前的版本中,字典是无序的,但3.7及之后版本中,字典是按照插入顺序存储的。可变性:字典的内容可以被修改。唯一性:字典中的键是唯一的。键必须是......
  • (2024最新毕设合集)德阳香树园游泳馆管理系统-50428|可做计算机毕业设计JAVA、PHP、爬虫
    德阳香树园游泳馆管理系统的设计与实现摘 要本文介绍了德阳香树园游泳馆管理系统的设计与实现。该系统采用B/S模式,使用Java语言开发,借助SSM框架和MySQL数据库进行后台支持。此外,还结合微信小程序框架Uniapp进行开发,以提供更便捷的用户体验。德阳香树园游泳馆管理系统旨在......
  • C#/asp.net-智能制造业ERP系统-89973(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP
    C#(asp.net)智能制造业ERP系统摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用C#技术建设智能制造业ERP系统。本设计主要实现集人性化、高效率......
  • 【最新原创毕设】基于SpringBoot的新高考志愿填报辅助系统+35190(免费领源码)可做计算机
    目 录摘要1绪论1.1研究背景1.2 研究意义1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1登录流程2.2.2数据删除流程2.3 系统功能分析2.4系统用例分析2.5本章小结3 系统总体设计3.1系统架构设计3.2系统功能模块......
  • Python系列(8)- Python 类和对象、模块和包
     1.类和对象   Python语言在设计之初,就定位为一门面向对象的编程语言,"Python中一切皆对象"就是对Python这门编程语言的完美诠释。   类和对象是Python的重要特征,相比其它面向对象语言,Python很容易就可以创建出一个类和对象。同时,Python也支持面向对象的三大......