這是我用requests庫在微博上爬取關於墮胎評論的時候得到的奇怪字符串:
字符串順序是亂的,但是通過print函數打印這個字符串卻是正常的,我把這個字符串放到pandas的dataframe裡面過後這堆字符串也能正常顯示,但是一旦通過下標訪問,或者遍歷這個字符串的時候,他還是有這種\u202e這樣的字符,而且順序也是亂的。
我去微博看了原博然後手動復制,也是正常的字符串。我檢查了一下編碼,微博的網頁是utf-8沒錯,我也指定了 response
對象為utf-8編碼 response.encoding='utf-8'
請問為什麼爬蟲會爬取到這樣夾雜著一堆\u202e \u202c的字符串?怎麼把這種字符串轉換成正常的字符串呢?
另外,我的requests版本是2.27.1,python版本是3.8.13。
\u202E
和 \u202C
是方向格式控制符\u202E
會使後面字符從右往左顯示,\u202C
是取消方向格式
所以把 \u202E
\u202C
刪除,再把中間字符反轉回來即可
import re reversedRE = re.compile(r'\u202E(.*?)(?:\u202C|$)', re.DOTALL) s = '\u202Ecba\u202Cdef\u202Eihg\u202C' print(s) s = reversedRE.sub(lambda m: m[1][::-1], s) print(s) # abcdefghi
\u202E
和 \u202C
是方向格式控制符\u202E
會使後面字符從右往左顯示,\u202C
是取消方向格式
所以把 \u202E
\u202C
刪除,再把中間字符反轉回來即可
import re reversedRE = re.compile(r'\u202E(.*?)(?:\u202C|$)', re.DOTALL) s = '\u202Ecba\u202Cdef\u202Eihg\u202C' print(s) s = reversedRE.sub(lambda m: m[1][::-1], s) print(s) # abcdefghi