python 爬虫编码(encoding和apparent_encoding)区别

Python021

python 爬虫编码(encoding和apparent_encoding)区别,第1张

在爬虫有时会遇到类似 好å�¬ç��é�³ä¹�ï¼�好ç��ç��MVé�½å�¨è¿�é��äº�ï¼�å��欢记å¾�ç»�æ��ä¸�ä¸ªå ³æ³¨å�¦ï¼� 格式的编码,很是头疼。如何解决这种问题呢?下面来看一下编码方法

在windows下使用非idle的其他ide编辑器,会碰到这个问题。对抓取到的网页内容进行先解码再编码即可。

以requests为例:

r = r.content.decode('gbk').encode('utf-8')

出现编码问题时,

1.仔细分析错误的类型。

看是decode(解码)错误还是encode(转码)错误。

2.搞清自己处理的字符串是什么类型的。

一般看网页的charset,一般为gbk,gb2312或gb18030.其中包含字符的大小为gb2312 <gbk <gb18030。一般出现‘gbk’ codec can’t decode,是因为

(1)要处理的字符串本身不是gbk编码,但是你却以gbk编码去解码

比如,字符串本身是utf-8的,但是你却用gbk去解码utf-8的字符串,所以结果不用说,则必然出错。

(2)处理的字符的确是gbk的,但是其中夹杂的部分特殊字符,是gbk编码中所没有的

如果有些特殊字符是GB18030中有的,但是是gbk中没有的。

则用gbk去解码,去所不支持的字符,也比如会出错。

所以,此种情况,可以尝试用和当前编码(gbk)所兼容的但所包含字符更多的编码(gb18030)去解码,或许就可以了。

3.然后换用这种的字符编码去编码或解码。

详情链接:https://www.crifan.com/summary_python_unicodedecode_error_possible_reasons_and_solutions/

原以为requests请求十分强大, 但遇到了模拟multipart/form-data类型的post请求, 才发现requests库还是有一丢丢的不足。 不过也可能是我理解的不足, 还希望读者老爷不吝指教! 在此感谢!

enctype属性:

enctype:规定了form表单在发送到服务器时候编码方式,它有如下的三个值。

①application/x-www-form-urlencoded:默认的编码方式。但是在用文本的传输和MP3等大型文件的时候,使用这种编码就显得 效率低下。

②multipart/form-data:指定传输数据为二进制类型,比如图片、mp3、文件。

③text/plain:纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。

值得注意的是:请求头的Content-Type属性与其他post请求的不同

总注:上边这两种构建参数的方式各有不同, 用起来感觉并不是那么的灵活,所以感叹requests有那么一丢丢丢的不足。值的注意的是,requests.post中files参数接收字典的形式和encode_multipart_formdata中params参数接收字典形式的区别!人生苦短......