2012-01-27 58 views
2

這裏是字符串:爲什麼我不能按空間分割?

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()的是,這是行不通的 - 返回只是其中的一部分。這裏有什麼可能是錯的?

Upd。完整的代碼:

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>') 
+1

請發佈可測試代碼。 – 2012-01-27 20:03:27

+1

嗯爲我工作,也許你可以發佈更多的代碼? – 2012-01-27 20:03:44

+0

我通過使用split()來獲得所有三個部分。請告訴我們你的代碼。 – taskinoor 2012-01-27 20:04:06

回答

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」]

+0

謝謝。不知何故,當用'self.response.out.write('這些字符被替換爲普通空格時,'通過Chrome控制檯查看時,它們也被替換了。' – 2012-01-27 20:31:37

+0

@ julio.alegria:感謝編輯,我無法弄清楚如何抑制它成爲一個空間 – DSM 2012-01-27 20:34:10

+0

@hahaha!不客氣 – juliomalegria 2012-01-27 20:34:31

0

因爲你的字符串被&nbsp;不是空格分開。

>>> full_name = soup.find('div', {'class': 'flagPageTitle'}).text.strip() 
>>> full_name 
u'\u041a\u0440\u0430\u0441\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u0432&nbsp;\u0421\u0435\u0440\u0433\u0435\u0439&nbsp;\u0410\u 
043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447' 

>>> full_name.split("&nbsp;") 
[u'\u041a\u0440\u0430\u0441\u0438\u043b\u044c\u043d\u0438\u043a\u043e\u0432', u'\u0421\u0435\u0440\u0433\u0435\u0439', u'\u0410\u0 
43b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432\u0438\u0447'] 
>>> len(full_name.split("&nbsp;")) 
3 
+0

嗯,分裂;作品。但你是如何發現的? – 2012-01-27 20:19:07

+0

我剛剛運行您的代碼。 – RanRag 2012-01-27 20:19:45

+0

爲什麼downvote。 – RanRag 2012-01-27 20:19:55

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;Александрович 

正如你所看到的字不是用常規的空間separed,但有一個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 
... 
Красильников 
Сергей 
Александрович 
+0

我可以知道爲什麼我得到downvoted ??? – juliomalegria 2012-01-27 20:20:09

+0

這不是我 - 我從來沒有對任何人下任過 - 但這可能是因爲這些詞不是用分號隔開的,而是由最後一個字符爲分號的nbsp標記分隔的。你的分裂是錯誤的。 – DSM 2012-01-27 20:22:08

+1

@DSM你是對的!該死的,我沒有意識到這一點。現在是固定的,我希望我可以扭轉這些降壓:( – juliomalegria 2012-01-27 20:26:54

相關問題