程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python爬取微博正常的評論文本,為什麼會得到像U+200E、U+202E、U+202C這樣的奇怪字符串?

編輯:Python

這是我用requests庫在微博上爬取關於墮胎評論的時候得到的奇怪字符串:

字符串順序是亂的,但是通過print函數打印這個字符串卻是正常的,我把這個字符串放到pandas的dataframe裡面過後這堆字符串也能正常顯示,但是一旦通過下標訪問,或者遍歷這個字符串的時候,他還是有這種\u202e這樣的字符,而且順序也是亂的。
我去微博看了原博然後手動復制,也是正常的字符串。我檢查了一下編碼,微博的網頁是utf-8沒錯,我也指定了 response 對象為utf-8編碼 response.encoding='utf-8'

請問為什麼爬蟲會爬取到這樣夾雜著一堆\u202e \u202c的字符串?怎麼把這種字符串轉換成正常的字符串呢?

另外,我的requests版本是2.27.1,python版本是3.8.13。




采納答案1:

\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


其他答案1:

\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

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved