1. 程式人生 > 實用技巧 >網頁爬蟲中\xa0、\u3000等字元的解釋及去除

網頁爬蟲中\xa0、\u3000等字元的解釋及去除

\xa0表示不間斷空白符,爬蟲中遇到它的概率不可謂不小,而經常和它一同出現的還有\u3000\u2800\t等Unicode字串。單從對\xa0\t\u3000等含空白字元的處理來說,有以下幾種方法可行:
使用re.sub

使用正則表示式可以輕鬆匹配所有空白字元,它對於Unicode字元也是有效的,比如:

import re
s = 'T-shirt\xa0\xa0短袖圓領衫,\u3000體恤衫\xa0買一件\t吧'
re.sub('\s', ' ', s)

#T-shirt  短袖圓領衫, 體恤衫 買一件 吧

不過該正則表示式會對所有字元都進行統一處理,可能會與原頁面展示效果有所出入。

使用translate
方法

str物件的translate方法也是去除這些字串的好幫手,該方法具體用法可參考Python標準庫,本處使用示例如下:

inputstring = u'\n               Door:\xa0Novum    \t'
move = dict.fromkeys((ord(c) for c in u"\xa0\n\t"))
output = inputstring.translate(move)
output
# Door:Novum  

利用split方法

將字串分割再重組,這時候空白字元就會被pass掉了,不過該方法殺傷力太大,會導致所有空白消失,一定要慎用。
使用示例:

s = '
T-shirt\xa0\xa0短袖圓領衫,\u3000體恤衫\xa0買一件\t吧' ''.join(s.split()) # T-shirt短袖圓領衫,體恤衫買一件吧

使用unicodedata模組

Python標準庫的unicodedata模組提供了normalize方法將Unicode字元轉換為正常字元,該方法可算是處理這類情況最好的方法了,它會讓字元迴歸到我們期望看到的樣子,同時不損害其它正常的空白字元,而且還能還原其它非空白字元。normalize第一個引數指定字串標準化的方式。 NFC表示字元應該是整體組成(比如可能的話就使用單一編碼),而NFD表示字元應該分解為多個組合字元表示。Python

同樣支援擴充套件的標準化形式NFKCNFKD,它們在處理某些字元的時候增加了額外的相容特性。使用該方法處理\xa0等字元的示例如下:

import unicodedata
s = 'T-shirt\xa0\xa0短袖圓領衫,\u3000體恤衫\xa0買一件\t吧'
unicodedata.normalize('NFKC', s)
# T-shirt  短袖圓領衫, 體恤衫 買一件 吧