为什么我不能按空格分割?

2 投票
4 回答
2121 浏览
提问于 2025-04-17 11:15

这里有一个字符串:

u'\u041a\u0440\u0430\u0441\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0421\u0435\u0440\u0433\u0435\u0439 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447'

如果我尝试用 .split() 来处理它,结果却不对——只返回了一个部分。这可能是什么问题呢?

更新:完整代码:

page = urllib.urlopen('http://www.rea.ru/Main.aspx?page=Krasil_nikov_Sergejj_Aleksandrovich')
soup = BeautifulSoup(page.read(), fromEncoding="utf-8")
full_name = soup.find('div', {'class': 'flagPageTitle'}).text.strip().split()
self.response.out.write(str(full_name) + '<br>')

4 个回答

1

在Python 3中,要去掉一个 :

text = TEXT_WITH_NBSP.replace('\xa0','')
print(text)
2

我运行了你的代码,得到了:

>>> from BeautifulSoup import BeautifulSoup
>>> import urllib
>>> page = urllib.urlopen('http://www.rea.ru/Main.aspx?page=Krasil_nikov_Sergejj_Aleksandrovich')
>>> soup = BeautifulSoup(page.read(), fromEncoding="utf-8")
>>> print soup.find('div', {'class': 'flagPageTitle'}).text
Красильников&nbsp;Сергей&nbsp;Александрович

你可以看到,这些词之间不是用普通的空格隔开的,而是用一种叫做HTML空格的东西(&nbsp;,也叫不换行空格)。如果你用.split('&nbsp;'),就可以解决你的问题:

>>> full_name = soup.find('div', {'class': 'flagPageTitle'}).text.strip().split('&nbsp;')
>>> len(full_name)
3
>>> for s in full_name: print s
... 
Красильников
Сергей
Александрович
7

哦,明白了。关键在于你没有在请求之前提供的信息。你的字符串看起来并不是你想的那样:

[u'\u041a\u0440\u0430\u0441\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u0432&nbsp;\u0421\u0435\u0440\u0433\u0435\u0439&nbsp;\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447']

实际上,它里面的空格是"&nbsp;",这是一种不换行的空格字符。关于如何去掉这些空格,StackOverflow上有很多相关的问题;我不太清楚哪种方法最好。

[换句话说,可以搜索“BeautifulSoup nbsp”。]

撰写回答