使用漂亮的some,我解析了html表中的一些值,如下所示:
for string in soup.stripped_strings:
all_tds.append(string)当我将字符串打印为
for string in soup.stripped_strings:
print string我获取页面中的所有字符串,但当我将其存储在列表中时,如第一段所示,然后打印列表,则在字符串前面得到一个u(unicode),如下所示
[u'stormvirux (4pa11cs031)', u'Semester:', u'5', u'Result:\xa0\xa0FIRST CLASS', u'Subject', u'External', u'Internal', u'Total', u'Result', u'Software Engineering (10IS51)', u'58', u'24', u'82', u'P', u'Systems Software (10CS52)', u'70', u'24', u'94', u'P', u'Operating Systems (10CS53)', u'58', u'18', u'76', u'P', u'Database Management Systems (10CS54)', u'42', u'25', u'67', u'P', u'Computer Networks - I (10CS55)', u'62', u'23', u'85', u'P', u'Formal Languages & Automata Theory (10CS56)', u'37', u'24', u'61', u'P', u'Database Applications Laboratory (10CSL57)', u'40', u'25', u'65', u'P', u'Systems Software & Operating Systems Lab. (10CSL58)', u'40', u'21', u'61', u'P', u'Total Marks:', u'591']如果我试图直接将string写到fl.write(string)文件中,就会得到错误
UnicodeEncodeError: 'ascii' codec can't encode characters in position 7-8: ordinal not in range(128)为什么会发生这种情况,可以做些什么?
发布于 2014-02-25 04:10:53
使用codecs.open()或io.open()使用适当的文本编码(即encoding="...")打开文本文件,而不是用open()打开字节文件。
发布于 2014-02-25 04:09:55
您可以看到列表中包含的Unicode字符串的表示形式。当您打印列表时,它中的每一项都会调用repr():
>>> s = u'text…'
>>> s
u'text\u2026'
>>> print(s)
text…
>>> print([s]) # <-- a list with a single item (the string)
[u'text\u2026']u''是Unicode文本的语法,可用于在Python源代码中定义Unicode字符串。注意:如果在字符串文本中使用非ascii字符,则应该在模块顶部定义源代码编码,例如# -*- coding: utf-8 -*-。
若要在写入文件时修复UnicodeEncodeError,需要将Unicode字符串转换为字节。 provides several html-specific ways去做吧。
注意:通常情况下,泛型codecs.open()或io.open() suggested by @Ignacio Vazquez-Abrams不适合html文本,例如,它们不修改<meta charset="...">标记。
发布于 2014-02-25 03:51:38
尝试将它们转换为字符串:
for string in soup.stripped_strings:
all_tds.append(str(string))这里有一个清单理解:
all_tds = [str(string) for string in soup.stripped_strings]https://stackoverflow.com/questions/22004144
复制相似问题