创作背景
今天想找本小说看,但是居然只能在网页上能找到资源,作为一名测试工程师,这能忍?多么严重的体验,这还能一起愉快的玩耍了吗?还能好好摸鱼了吗?
果断花点时间,查看页面结构,写个脚本自动请求网页,获取小说内容,并进行储存到本地txt文件中,放在手机里,躺在床上慢慢看。没想到,来回调试了好几次,o(╯□╰)o。
好吧,工作都没这么热情,果然爱好才是第一生产力。\(^o^)/~
遇见问题
大部分的网页都是utf-8编码,所以在进行请求和写入文件中时,不会出现乱码的问题。但不包括所有网页都是如此,有些网页会采用的GBK形式编码,这种情况下,网页正文内容中还使用如 形式来代替 【不换行空格】。当两者buff叠加,因为写入文件时,GBK编码不认识 ,运行时会出现报错,导致中断。等了十几分钟,美滋滋准备打开文件看小说时,发现一章没下了,那种心情。家人们,谁懂啊,泪如雨下啊有木有。废话较多,进入正题。
原文
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个 ,给我默认替换成了????????,为了下载后的结构美观,将其换成了换行空格
后续
之后,研究了下python的编译打包功能,生成了一个执行文件,双击即可使用,连pycharm编辑器都不用打开了,即输即用,后台运行。配上日志输出,发生错误时,记录报错问题便于后续排查和断点继续下载。w(゚Д゚)w,妈妈再也不用怕我看不了小说了。
下篇文章记录python的编译打包功能