为什么我不能按空格分割?
这里有一个字符串:
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
Красильников Сергей Александрович
你可以看到,这些词之间不是用普通的空格隔开的,而是用一种叫做HTML空格的东西(
,也叫不换行空格)。如果你用.split(' ')
,就可以解决你的问题:
>>> full_name = soup.find('div', {'class': 'flagPageTitle'}).text.strip().split(' ')
>>> 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 \u0421\u0435\u0440\u0433\u0435\u0439 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447']
实际上,它里面的空格是" "
,这是一种不换行的空格字符。关于如何去掉这些空格,StackOverflow上有很多相关的问题;我不太清楚哪种方法最好。
[换句话说,可以搜索“BeautifulSoup nbsp”。]