南强小屋 Design By 杰米
爬虫部分解码异常
response.content.decode() # 默认使用 utf-8 出现解码异常
以下是设计的通用解码
通过 text 获取编码
# 通过 text 获取编码 import requests from lxml import etree def public_decode(): headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } response = requests.get('https://blog.csdn.net/a13951206104', headers=headers) html = etree.HTML(response.text) # response.text 能自动获取编码, 大多乱码 _charset = html.xpath('//@charset') or [] if _charset: encode_content = response.content.decode(_charset[0].strip().lower(), errors='replace') # 如果设置为replace,则会用"response_obj": response} for _charset_ in ['utf-8', 'gbk', 'gb2312'] # 国内主要这3种: if '"response_obj": response} else: # 默认还得是 utf-8 return {'response_text': response.content.decode('utf-8', errors='replace'), "response_obj": response}
通过数据 来解编码(推荐)
def public_decode(response): headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } response = requests.get('https://blog.csdn.net/a13951206104', headers=headers) html = etree.HTML(response.text) # 不希望抓下来的数据中有非法字符 item = dict() result = None for _charset_ in ['utf-8', 'gbk', 'gb2312']: if response: result = response.content.decode(_charset_, errors='replace') item['content'] = html.xpath('//*[@id="content"]') if '�' not in result['content'].strip(): result =response.content.decode(_charset_, errors='replace') break if not result: # 默认 utf-8 result = response.content.decode(_charset_, errors='replace')
errors=‘replace' 使解码不报异常, 然后把几个常用的编码一个个试下, 最后要看落下来的数据, 所以最好拿数据 去获取合适的编码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无python3的UnicodeDecodeError解决方法的评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。