200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > [229]python3的requests类抓取中文页面出现乱码的解决办法

[229]python3的requests类抓取中文页面出现乱码的解决办法

时间:2019-09-12 17:38:19

相关推荐

[229]python3的requests类抓取中文页面出现乱码的解决办法

这种乱码现象基本上都是编码造成的,我们要转到我们想要的编码,先po一个知识点,嵩天老师在Python网络爬虫与信息提取说到过的:response.encoding是指从HTTP的header中猜测的响应内容编码方式,如果header中不存在charset,则默认编码为ISO-8859-1 ,这样一来某些不规范的服务器返回就必然乱码了;response.apparent_encoding是指从内容中分析出的响应内容编码方式。requests内部的 utils 也提供了一个从返回 body 获取页面编码的函数get_encodings_from_content,这样如果服务器返回的头不含 Charset,再通过 get_encodings_from_content 就可以知道页面的正确编码了。下面是调试的过程:

import requestsfrom requests.exceptions import RequestExceptiondef get_one_page(url):try:response=requests.get(url)if response.status_code == 200:#print(response.text)print(response.encoding)print(response.apparent_encoding)r=response.textprint(requests.utils.get_encodings_from_content(r)[0])a=r.encode('ISO-8859-1').decode(requests.utils.get_encodings_from_content(r)[0])print(a)print('------------------------------------')b = r.encode('ISO-8859-1').decode(response.apparent_encoding)print(b)return Noneexcept RequestException:return Nonedef main():url = '/'get_one_page(url)if __name__=='__main__':main()

看图!看图!看图!

# response=requests.get(skip_url,headers=self.headers)# # print(response.text.encode('ISO-8859-1').decode('utf-8'))#如果出现乱码,可以直接写下面的通用转换# html=etree.HTML(response.text.encode(response.encoding).decode(response.apparent_encoding))

如果python抓取网页后用decode解码,报错信息如下:

UnicodeDecodeError: ‘gb2312’ codec can’t decode byte 0xb0 in position 18020: illegal multibyte sequence

推测是网页数据中有错误的字符无法解码,decode有参数errors,设置一下就好啦~

html=etree.HTML(response.text.encode(response.encoding).decode(response.apparent_encoding,errors = 'ignore'))

来源:/p/b535a9434120

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。