2012-01-30 47 views
-1

今天早上,我花了几个令人沮丧的时间,试图处理来自刮网页的字符串。我似乎无法得到一种降低提取的字符串的一致方式,因此我可以检查关键字 - 并将其推动我转弯。BeautifulSoupTag,字符串和UnicodeEncodeError不是很漂亮

下面是一个代码片段,从一个DOM元素检索文字:

temp = i.find('div', 'foobar').find('div') 
if temp is not None and temp.contents is not None: 
    temp2 = whitespace.sub(' ', temp.contents[0]) 
    content = str(temp2) 

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 150: ordinal not in range(128)

我也尝试下面的语句 - 其中没有工作;即,它们导致了同样的错误被抛出:

content = (str(temp2)).decode('utf-8').lower() 
content = str(temp2.decode('utf-8')).lower() 

有谁知道如何包含在BeautifulSoupTag内成小写ASCII德文本转换,所以我可能会进行的关键字不区分大小写的搜索?

+2

尝试在这里找到了答案:[文件](http://www.crummy.com/software/BeautifulSoup/documentation.html#Beautiful汤给你的Unicode,该死的) – methyl 2012-01-30 12:36:06

+0

你能只需使用'unicode(temp2)'? – 2012-01-30 12:45:36

+0

阅读我的答案,你已经接受[你几乎相同的问题](http://stackoverflow.com/q/9012607/4279) – jfs 2012-01-30 14:30:39

回答

2

你可能想要ASCII码,但是你需要Unicode,而且很有可能你已经拥有它了。 XML解析器返回unicode对象。

首先做print type(temp2) ...应该是unicode除非发生了不幸的事情,比如说可能是whitespace.sub() thingy;那是什么?

如果你想多个空白字符标准化成一个单一的空间,做

temp2 = u' '.join(temp.contents[0].split())

这将使那个讨厌的U '\ XA0' 消失,becase的这是一个空白(NO-BREAK SPACE)。

然后尝试content = temp2.lower()

相关问题