python中的编码问题

CamoFox MCP:让AI助手隐身操作浏览器的反检测自动化实战 浏览器自动化是提升工作效率和实现数据采集的关键技术,其核心原理在于通过程序脚本模拟人类在网页上的交互行为。传统方案如Selenium或Playwright虽功能强大,但需要开发者编写复杂脚本并处理反爬机制。随着AI Agent技术的发展,自然语言驱动的自动化成为新趋势,它能将任务规划与逻辑判断交由AI处理,大幅降低使用门槛。Model Context Protocol(MCP)作为连接AI与外部工具的标准协议,在此场景下价值凸显,它使得AI助手能直接调用丰富的浏览器操作工具。CamoFox MCP创新性地将 阅读详情

昨天写了第一个定向爬虫,然后爬了一些妹子的图片,然后今天想着爬部小说试试看,然后就暴露了一些问题。

就是编码以及转换的问题。

首先是找到目标网站,找准目标后,写好代码准备先爬一章试试看。

#-*-coding:utf8-*-
import re
import requests


url = 'http://www.biqiuge.com/book/4772/2940354.html'
# hea = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
res = requests.get(url)
html = res.text
text_content = re.findall('&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<br />',html,re.S)
print(text_content)

看着没什么问题,但是一运行,返回的确实一串乱码


这跟昨天不太一样啊,昨天能正常显示中文,然后我又试了试用昨天的方式把代码改了改。

#-*-coding:utf8-*-
import re
import requests


url = 'http://www.biqiuge.com/book/4772/2940354.html'
# hea = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
res = requests.get(url)
html = res.content.decode('utf-8')
print(html)

这回直接运行 出错了,提示

Traceback (most recent call last):
  File "F:/PycharmProjects/third_project/1.py", line 9, in <module>
    html = res.content.decode('utf-8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 373: invalid start byte

明明昨天的代码可以显示中文的。

这是昨天的代码

#-*-coding:utf8-*-
import requests
import re

# get web source code
url1 = 'http://enrz.com/fhm/2016/11/13/67848.html'
r = requests.get(url1)
html = r.content.decode('utf-8')
print(html)

这是昨天的结果


同样是r.content.decode('utf-8')为什么一个能运行,而另一个却出错呢?这其中到底出了什么问题?哪个环节出错了呢?

于是开始了百度之旅,根据百度到的我从头开始捋一捋

首先,requests.get(url)返回的是一个response对象,response里有很多属性,比如,content,text,state_code,encoding,cookies,url,headers,raw等等,其中 content是bytes类型的,text是str类型的,而根据python的定义,python里的str是Unicode编码的,而bytes类型为utf-8编码的。而Unicode编码的str可以通过encode()方法编码成bytes类型、bytes类型的可以通过decode()解码成Unicode类型。其中encode()里面的参数为调用对象想要成为的编码类型,而decode()里的参数为调用对象本身的编码类型。

如以下例子:

s = '蟒蛇'
print(type(s))
s1 = s.encode('utf-8')
print(type(s1))
print(s1)
s2 = s1.decode('utf-8')
print(type(s2))
print(s2)

得到输出为


那么按道理来说只要我get的网页里面的内容是utf-8编码的,那么我应该可以直接通过 .text 属性或者 .content.decode('utf-8) 方式显示源代码里的中文啊,于是我想,会不会是我get的这个网页源代码里面的文字不是utf-8编码的?于是打开网页查看源代码:


可以看到,在网页源代码里是没有匹配到utf-8的字符的


没想到,里面的汉字使用的是'gbk'编码,据说现在大部分网址都是使用的utf-8编码了,没想到这个网站用的还是gbk编码,或许这就是编码出错的原因?因为当把网页换成百度的时候,无论用text还是.content.decode('utf-8)都是能显示中文的。问题的关键应该就在这里。另外找了好几个网站都ok。但是无论我怎么转换,先decode成Unicode再encode成gbk输出,还是乱码,实在是想不明白。

再捋一捋,首先网页从服务器上加载完,response给爬虫,服务器上肯定不会出错的,那就应该是爬虫这里出错了,在pycharm上运行的爬虫在接收到服务器的response后首先应该会用默认的编码方式(utf-8)对源码进行编码,然后再呈现给用户,那么问题应该出在这里,我后来在pacharm上的各种encode和decode都是在经过pycharm处理过后的‘源码’,所以翻过来覆过去无论我怎么编,怎么解,都是在乱码的基础上进行的。我暂时想不到解决办法。

折腾了一天,问题的根本还是没有解决,换了一个小说网站就好了,这只是表面解决了一波,但是也没白折腾,大概了解了python里的编码以及编码转换过程了。问题暂且搁置,慢慢琢磨。



Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析 本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。 阅读详情

相关推荐

异步复位同步释放:如何确保复位信号的可靠性与时序安全

本文深入探讨了异步复位同步释放技术在数字电路设计中的关键作用,详细分析了复位信号的可靠性与时序安全问题。通过对比异步复位与同步复位的本质区别,揭示异步复位的优势与潜在风险,并提供了标准的Verilog实现方案。文章还涵盖了多时钟域下的复位同步策略、复位网络时序约束方法以及实际工程中的经验教训,为数字系统设计者提供了全面的复位信号处理指南。

weixin_29213655的博客 400

Python3爬虫之一初试

前面系列学习了Java的爬虫,相比而言,楼主更倾向于Python简洁易懂。与Java类似,都要封装请求,Python2系列使用的是urllib2,Python3后全部融合为urllib。         下面以请求知乎首页的例子,说明Python的简单使用。 # coding = utf-8 from urllib import request # 目标网址 url = "http://w

行者小朱的博客 954

ICS v9.5 OverbyteIcsWSocket.pas 整体架构分析

核心架构:OverbyteIcsWSocket.pas 是 Internet Component Suite (ICS) 的基础网络组件单元,提供跨平台 Winsock API 封装,支持TCP/UDP 客户端/服务器,DNS 解析和Raw Socket。在 v9.5 中,SSL/TLS 代码已分离至 OverbyteIcsSslBase.pas 等单元,使核心单元更精简,专注于非加密 socket 操作。

sonadorje的专栏 993

解决乱码问题content.decode(jbk)

第1种方式:content.decode('gbk') url = 'http://pic.netbian.com'#res=requests.get(url=url)#解决乱码问题content.decode('jbk')res = requests.get(url=url).content.decode('gbk') #print(res.text) 加了 gbk后,就要去掉...

3083

移远EC800M CAT1模块HTTP POST实战:从AT指令到OneNet平台数据上报(附STM32代码)

本文详细介绍了移远EC800M CAT1模块通过AT指令实现HTTP POST数据上报到OneNet平台的完整流程,包含STM32实战代码。内容涵盖PDP上下文激活、HTTP服务配置、JSON数据包构建等关键技术要点,并提供硬件连接、状态机设计和错误处理等实用方案,助力开发者快速实现物联网设备稳定数据传输。

weixin_42565652的博客 508

Unity 第一人称视角控制移动、旋转

第一人称视角操作此功能主要是借鉴YouTube,写的蛮好我就搬运过来让大家也试试。

qq_36515472的博客 4202

常见问题点

问题点响应解码错误 响应解码错误 有些页面虽然是utf-8编码的,但是在使用utf-8解码的时候,却报错,说无法解码 这属于反爬机制:故意在页面中加入一些无法解码的字符 解决方式: """ #解码错误时,严格报错 1.res.content.decode("utf-8","strict") #解码错误时,忽略 2.res.content.decode("utf-8","ignore") #解码错误时,替换反斜杠 3.res.content.decode("utf-8","backslashreplace

weixin_45228198的博客 463

别再只盯着DDR5了!聊聊3D DRAM:它凭什么能解决AI算力的内存墙难题?

本文深入探讨了3D DRAM技术如何突破AI算力的内存墙限制。通过立体堆叠架构,3D DRAM在存储密度、带宽和延迟方面实现显著提升,有效解决AI训练和推理中的内存瓶颈问题。文章还分析了三星、SK海力士等巨头的技术路线图,并指出商业化面临的挑战与机遇。

weixin_42685438的博客 189

python爬虫学习笔记 实例一:回车桌面

学习爬虫的笔记,爬取“回车桌面”中的一些图片的简单案例

qq_57610048的博客 1300

SAP FB03凭证修改实战:巧用BAPI FI_DOCUMENT_CHANGE更新抬头与行项目

本文详细介绍了SAP FB03凭证修改的实战技巧,重点解析了BAPI FI_DOCUMENT_CHANGE的使用方法。通过该接口,用户可以在不冲销原凭证的情况下直接更新抬头文本(BKTXT)和行项目文本(SGTXT),确保凭证编号连续且符合审计要求。文章包含核心机制解析、完整实现步骤、错误处理方案以及高级应用场景,帮助开发者高效完成SAP财务凭证修改。

weixin_29251567的博客 425

【UE5】三步搞定Pixel Streaming:从零搭建Windows像素流服务

本文详细介绍了如何在Windows平台上快速搭建UE5 Pixel Streaming像素流服务,从插件安装、项目打包到服务启动的全流程操作。通过实战案例和优化配置,帮助开发者实现零客户端配置、跨设备兼容的高性能3D应用流式传输,特别适合建筑可视化和实时协作场景。

weixin_29000991的博客 318

爬虫——requests.get爬虫模块参数

地址和请求头参数--url和header res = requests.get(url,headers=headers)  向网站发起请求,并获取响应对象 参数 url :需要抓取的URL地址 headers : 请求头 timeout : 超时时间,超过时间会抛出异常 响应对象(res)属性 encoding :响应字符编码res.encoding = 'utf-8' text...

凌逆战的博客 1万+

五、MT8168 音频驱动之SPEAKER

本章主要讲解MT8168平台的内部SPEAKER驱动配置。分为HP接法和LINE OUT接法。2.1.3 audio_custom_exp.h设置。2.1.4 mixer_paths.xml设置。2.2.3 mixer_paths.xml设置。2.1.2 ProjectConfig 设置。2.2.2 ProjectConfig 设置。2.2.1 deconfig设置。2.1.1 DTS设置。......

Joon2020的博客 1664

Python编码问题

Python编码问题详解 继上一篇文章字符集和编码详解总结了常见字符编码后,这篇文章会对python中常见的编码问题进行分析和总结。由于python3.x版本和python2.x版本在字符编码方面有很大差异,所以本文都是以Python2.7.5来分析2.x版本中的字符编码问题。 1.Python编码基础 1.1 str和unicode python中有两种数据模型来支持字符串这种数

__七把刀__ 2603

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

python编码问题怎么解决_python编码问题总结

最近利用python抓取一些网上的数据,遇到了编码的问题。非常头痛,总结一下用到的解决方案。linux中vim下查看文件编码的命令 set fileencodingpython中一个强力的编码检测包 chardet ,使用方法非常简单。linux下利用pip install chardet实现简单安装fencoding输出格式 {'confidence': 0.96630842899499614,...

weixin_39675289的博客 236

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python2、python3编码问题的理解

相信大多数人在学习python的过程中,遇到第一个比较棘手的问题就是编码错误,这段时间在学习python,被这个问题困惑了好几个星期了,然后就不断的上网查资料,零零散散的看了挺多了,特此写篇博客整理下,也方便自己日后的学习。由于本人水平有限,难免会出现不足、错误之处,还请批评指正。 1. 浅谈编码 我们都知道,计算机并不认识我们平常使用的字符,字符在计算机中的表示形式是低电平和高电平组成的序列...

weixin_41558411的博客 1380

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

python 编码问题_Python 编码问题

作为中文用户,初学 Python 最容易碰到的问题估计就是编码问题了。明明英文的都可以用到中文的时候就要出问题,而且出错信息难以理解,想要解决问题又不知道从何开始。幸运的是编码问题通过预防性的措施是很好避免的。下面从几个方面来讲讲 Python 中处理中文及 Unicode 容易碰到的问题。Unicode 编码基础这里非常简单的讲一下编码知识,此部分表述可能不太准确,如果你对 Unicode 更为...

weixin_35742845的博客 222

一文搞懂python2编码问题

博主在做nlp的时候,涉及到中文处理,经常需要print调试错误信息,但是python2这个print中文是在是太不好用了,几经周折,找到了一个懒人方法。 执行pip install uniout,然后就可以使用啦~~~ import uniout list = ["哈哈哈","嘿嘿嘿"] print list ...

hustanding 810

python编码问题怎么解决_学习python处理python编码问题

Python基础学习中编码问题,就是为什么在Windows命令窗口打开文本显示的是乱码。碰到班里的睡觉大王个性签名:早中晚三个饱,饭前饭后六个倒如何正确解决Python中的中文编码问题import timeprint u">>>这是一个测试星河滚烫,你是人间理想,世事无常,你是人间琳琅,众人平庸,你是人间星光,万事浮沉,你是人间归途。刚学python,抓中文网页遇到编码的问题,怎么转换其实你可以用...

weixin_39626298的博客 211

理解和解决Python2中的编码问题

前言经常处理一些文本,处理英文语料没什么问题,但是到了中文这儿就让人抓狂了,稍微不注意就会窜出各种乱码错误,平时出现几个小错误试试调调也能过去,但是对于编码这个问题还是畏惧,这几天好好整理了一下python的编码问题,感谢万能的Google和万能的StackOverflow,算是解决了我当前对编码问题的一些困惑编码的前世今生从unicode说去在计算机中,所有的东西都是以字节形式储存的,但是字节对于

luchi007的专栏 2万+

python编码格式的问题_python编码问题总结

最近利用python抓取一些网上的数据,遇到了编码的问题。非常头痛,总结一下用到的解决方案。linux中vim下查看文件编码的命令 set fileencodingpython中一个强力的编码检测包 chardet ,使用方法非常简单。linux下利用pip install chardet实现简单安装import chardetf = open('file','r')fencoding=chard...

weixin_39664477的博客 137

python3 爬虫中的编码问题

问题1 原网页链接显示: https://baike.baidu.com/item/小肠过敏性紫癜 直接抓取报错: url='https://baike.baidu.com/item/小肠过敏性紫癜' urlop=urllib.request.urlopen(url,timeout=100) UnicodeEncodeError: 'ascii' codec can't encode ch...

LIVEAD的博客 554

python爬虫编码问题_python爬虫编码问题

爬虫,新手很容易遇到编码解码方面的问题。在这里总结下。如果处理不好编码解码的问题,爬虫轻则显示乱码,重则报错UnicodeDecodeError: ‘xxxxxx‘ codec can‘t decode byte 0xc6 in position 1034: invalid continuation byte,这个xxx可能是 ascii utf8 gbk等。大家一定要选个专门的时间学习下这方面...

weixin_33573700的博客 936

python编码格式的问题_Python解析XML是出现编码问题

Python解析XML是出现编码问题在python中遇到编码问题是一个非常痛苦的问题。在使用Python处理XML的问题上,首先遇到的是编码问题。Python并不支持gb2312,所以面对encoding="gb2312"或encoding="utf8"的XML文件会出现错误。Python读取的文件本身的编码也可能导致抛出异常,这种情况下打开文件的时候就需要指定编码。此外就是XML中节点所包含的中...

weixin_39526564的博客 1029

Python 常见编码问题与解决方案

编码问题在 Python 中并不罕见,理解字符编码的基本概念以及如何在不同场景下正确处理编码,是每个开发者必须掌握的技能。通过本文的示例和解决方案,你应该能够应对大多数常见的编码问题,确保你的代码在处理文本数据时不再出错。在 Python 2 中,默认的字符串是字节串,而在 Python 3 中,默认的字符串是 Unicode 字符串。编码错误通常发生在处理文本数据时,尤其是文本文件的读取、写入,或者处理来自不同编码系统的数据时。确保在 Python 3 中,你的字符串数据是 Unicode 编码。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 2588
上一篇: 爬虫的一些基本知识(1)
下一篇: 如何理解python中的 if __name__ == "__main__"
codeMore++
博客等级 码龄9年 6粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值