【爬虫】编码或解码(decode,encode)报异常的处理方式

1 经常出现的问题

  • 网页中的编码明明写着charset=‘utf-8’,
    • urllib.request.urlopen(【url】).read().decode(‘utf-8’) 竟然报错
  • 无界面浏览器可以通过driver.page_source取得浏览器中的源码
    • 一般windows环境下部署的无界面取page_source不报错,但在centos7下部署的,也容易报编码错误

针对这两种情况,举两个最简单的方法

2 解决方法

2.1 网页返回的源码decode失败

import urlib.request as ur

response_b = ur.urlopen(【URL】).read() # 返回字节
response_str = response_b.decode("utf-8","ignore") # 忽略非法字符

decode(encoding,errors=‘strict’)

errors常见取值 说明
strict 非法字符报异常
ignore 忽略非法字符
replace ?替换非法字符

2.2 selinum取page_source出现异常

from selenium import webdriver

# 实例化driver
driver = webdriver.Chrome(
    executable_path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe',
)
driver.get('http://www.baidu.com')
try:print(dirver.page_source)
except:pass
page_source = driver.page_source.encode('utf-8','ignore') # 加入这句话
print(page_source)

3 估测字节编码

  对于一个字节数据,我们不知道他的编码方式,可以使用chardet,来返回最有可能的编码方式

3.1 安装chardet

pip install chardet

3.2 使用案例

import chardet

obj_str = '中文'
obj_b = obj_str.encode('utf-8')

ret = chardet.detect(obj_b)
print(ret)

输出结果:

{‘encoding’: ‘utf-8’, ‘confidence’: 0.7525, ‘language’: ‘’}

obj_b最有可能是utf-8编码,把握度是0.7525

猜你喜欢

转载自blog.csdn.net/kzl_knight/article/details/103182569