我用python解析html,其中有日期字符串:[ 24-Янв-17 07:24 ]
。”ЯЯН”是“简”。我想把它转换成datetime对象。在
# Some beautifulsoup parsing
timeData = data.find('div', {'id' : 'time'}).text
import locale
locale.setlocale(locale.LC_TIME, 'ru_RU.UTF-8')
result = datetime.datetime.strptime(timeData, u'[ %d-%b-%y %H:%M ]')
错误是:
ValueError: time data '[ 24-\xd0\xaf\xd0\xbd\xd0\xb2-17 07:24 ]' does not match format '[ %d-%b-%y %H:%M ]'
type(timeData)
返回unicode。从utf-8
编码timeData
返回UnicodeEncodeError
。怎么了?在
chardet返回{'confidence': 0.87625, 'encoding': 'utf-8'}
,当我写:datetime.datetime.strptime(timeData.encode('utf-8'), ...)
时,它返回上面的错误。在
原始页具有window-1251
编码。在
退货
<type 'unicode'>
[ 24-Янв-17 07:24 ]
<type 'str'>
[ 24-???-17 07:24 ]
快速修复
明白了!
янв
在CPython 2.7.12中必须是小写。代码(CPy 2.7.12和CPy 3.4.5中关于cygwin的工作):结果:
^{2}$如果我使用大写
Янв
,它在py3中有效,但是在py2中它给出了一般情况
要在Python2中处理这个问题,请先使用小写字母(请参见this answer):
结果:
我不能用你的beauthulsoup代码测试它,但是,一般来说,使用Unicode 然后使用上面的数据。在
或者,如果可能的话,切换到python3:)。在
解释
我是怎么想出来的?我在CPython源代码中查找} 模块,其中包含^{} 。我还发现了
strptime
(search)的代码。我找到了方便的^{LocaleTime
的mention。要打印可用的月份名称,请执行以下操作(添加到上述“快速修复”下的代码末尾):a_month
具有每个the source的缩写月份名称。在在Py3上,可以得出:
在Py2上,结果是:
还有一堆。请注意,第一个字符是
\xd1\x8f
,在错误消息中,\xd0\xaf
不匹配。在您只需将俄语月份名称更改为英语:
相关问题 更多 >
编程相关推荐