python请求模块记录编码

时间:2018-01-24 18:26:34

标签: python logging python-requests

我正在使用python并请求module == 2.18.4

在使用请求抓取某些数据时,我使用了日志记录模块进行调试。

我希望日志看起来像这样:

[DEBUG] 2018-01-25 03:15:36,940 http://localhost:8888 "GET /aaa" 200 2290
[DEBUG] 2018-01-25 03:15:36,940 http://localhost:8888 "GET /aaa" 200 2290
[DEBUG] 2018-01-25 03:15:36,940 http://localhost:8888 "GET /aaa" 200 2290  

但我明白了:

[DEBUG] 2018-01-25 03:15:36,940 http://localhost:8888 "GET /aaa" 200 2290
[DEBUG] 2018-01-25 03:15:36,974 EUC-JP Japanese prober hit error at byte 1765
[DEBUG] 2018-01-25 03:15:36,990 EUC-KR Korean prober hit error at byte 1765
[DEBUG] 2018-01-25 03:15:36,994 CP949 Korean prober hit error at byte 1765
[DEBUG] 2018-01-25 03:15:37,009 EUC-TW Taiwan prober hit error at byte 1765
[DEBUG] 2018-01-25 03:15:37,036 utf-8 not active
[DEBUG] 2018-01-25 03:15:37,036 SHIFT_JIS Japanese confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,036 EUC-JP not active
[DEBUG] 2018-01-25 03:15:37,036 GB2312 Chinese confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,036 EUC-KR not active
[DEBUG] 2018-01-25 03:15:37,036 CP949 not active
[DEBUG] 2018-01-25 03:15:37,036 Big5 Chinese confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,036 EUC-TW not active
[DEBUG] 2018-01-25 03:15:37,036 windows-1251 Russian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 KOI8-R Russian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 ISO-8859-5 Russian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 MacCyrillic Russian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 IBM866 Russian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 IBM855 Russian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 ISO-8859-7 Greek confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 windows-1253 Greek confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 ISO-8859-5 Bulgairan confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 windows-1251 Bulgarian confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 TIS-620 Thai confidence = 0.01
[DEBUG] 2018-01-25 03:15:37,038 ISO-8859-9 Turkish confidence = 0.47949350706
[DEBUG] 2018-01-25 03:15:37,038 windows-1255 Hebrew confidence = 0.0
[DEBUG] 2018-01-25 03:15:37,038 windows-1255 Hebrew confidence = 0.0
[DEBUG] 2018-01-25 03:15:37,038 windows-1255 Hebrew confidence = 0.0
...

我不想在日志中使用该编码。我该如何删除它们?

6 个答案:

答案 0 :(得分:7)

尝试将模块chardet.charsetprober的日志记录级别设置为高于DEBUG的值(例如INFO)。

logger = logging.getLogger('chardet.charsetprober')
logger.setLevel(logging.INFO)

答案 1 :(得分:3)

我遇到了同样的问题,发现这些额外的日志来自chardet.charsetprober模块。

要取消这些日志,请在导入后输入。

logging.getLogger('chardet.charsetprober').setLevel(logging.INFO)

这不会打印来自chardet.charsetprober模块的任何DEBUG级别消息,您只能获得所需的日志消息。

希望它有所帮助!

答案 2 :(得分:2)

response.content.decode('ISO-8859-1') 将它设置为mix-charset解码,为我工作

答案 3 :(得分:1)

我认为此问题与r.texttext返回的response属性有关)。由于requests不知道具体的编码,因此必须尝试,因此记录了长列表。为避免这种情况,您可以在访问INFO之前将日志记录级别设置得更高(例如r.encoding='utf-8'),或指定编码(r.text或您喜欢的任何内容)。

答案 4 :(得分:0)

我不确定我是否正确理解您的问题,为什么不能将此邮件分隔到不同的日志记录级别。

答案 5 :(得分:0)

如其他答案所述,当您调用r.text字段时,请求库将尝试猜测文本的编码。

在某些情况下,可以使用r.content字段(二进制响应内容)代替r.text来避免这种猜测过程。