爬虫之lxml报错:ValueError: Unicode strings with encoding declaration are not supported. Please use bytes

说明:

先说明一下,不要问我网站,因为工作原因,网站不会给你,还望谅解。如果你使用lxml提取数据是报的错误和标题差不多,可以来参考参考我的解决方法,因为我也是第一次遇见这种问题,所以记录下来。

问题以及解决过程。

今天测试一个网站,然后遇见一个问题,使用reqest请求,直接使用resp.text,返回的数据是没有问题的。测试代码如下:

resp = requests.get(url,headers=headers)
resp_text = resp.text
html = etree.HTML(resp_text)

然后我是etree.HTML()提取函数就报错。报错就在html = etree.HTML(resp_text)这一行。

然后我又使用chardet的测试字节的编码格式是gb2312,
测试代码:

resp_text = resp.content
ren = chardet.detect(resp_text)
print(ren)

然后以为需要显解码,但是直接text也打印正常呀,没办法,试试吧。

resp_text = resp.content.decode('gb2312')
tml = etree.HTML(resp_text)

报错还是tml = etree.HTML(resp_text)这一行。

报错代码:

  File "src\lxml\etree.pyx", line 3170, in lxml.etree.HTML
  File "src\lxml\parser.pxi", line 1872, in lxml.etree._parseMemoryDocument
ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

弄的这个问题心碎

在这里插入图片描述

最终的解决方法:

这也是尝试好多次,才得以成功。经过多次测试,原来还需要将解密的字符串,在python中使用utf-8编码一下传入就可以了。

resp = requests.get(url,headers=headers)
resp_text = resp.content.decode('gb2312')
html = etree.HTML(resp_text.encode('utf-8'))

或者

resp = requests.get(url,headers=headers)
resp_text = resp.text
html = etree.HTML(resp_text.encode('utf-8'))

至此问题解决,之前直接传入字符串是每页问题的,估计是这个网站的编码格式的问题,下次再遇见这种问题,优先尝试这个解决方法了。
在这里插入图片描述

一个小问题弄了快俩小时了,唉。。。

在这里插入图片描述

如果帮助到你了,欢迎点个赞哈在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhaojiafu666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值