在response.content中检查字符串触发TypeError错误的原因及解决方法求助
解决 TypeError: a bytes-like object is required, not 'str' 问题
嘿,这个错误我日常帮人排查的时候碰到好多次了,核心原因其实很简单——你在字节对象(bytes)和字符串(str)之间做了不兼容的操作。
为什么会触发这个错误?
当你发送HTTP请求后,有些方式获取到的响应内容是字节类型(比如用requests.get().content、urllib.request.urlopen().read()),但你却用普通字符串(比如"要检查的语句")去判断是否包含,这两种类型就像不同语言的人对话,根本没法直接对比,所以Python就抛出了这个类型错误。
两种快速解决办法
方法1:把字节对象转成字符串
用decode()方法把字节内容解码成字符串,记得指定正确的编码(通常是utf-8,如果不确定可以用响应返回的编码):
import requests response = requests.get("你的请求URL") # 解码成字符串 response_str = response.content.decode("utf-8") # 现在就可以正常判断包含关系了 if "你要检查的语句" in response_str: print("找到了目标内容!")
如果你用的是requests库,更省事的是直接用response.text——它已经自动帮你把字节内容转成字符串了:
if "你要检查的语句" in response.text: print("找到了目标内容!")
方法2:把字符串转成字节对象
反过来,给你要检查的字符串前面加个b,把它变成字节类型,这样就能和响应的字节内容直接对比了:
import requests response = requests.get("你的请求URL") # 用字节字符串去判断 if b"你要检查的语句" in response.content: print("找到了目标内容!")
小提醒
如果用decode()的时候出现乱码,别慌,可以先看看响应的编码是什么(比如print(response.encoding)),然后用对应的编码去解码,比如response.content.decode(response.encoding)。
内容的提问来源于stack exchange,提问作者Piers Thomas
相关产品推荐
相关产品推荐

