自己動手實現html去標籤和文字提取

2021-08-02 05:28:49 字數 2841 閱讀 3364

這裡主要介紹一下re.compile(pattern[, flags])裡面的flags用法

識別符號作用

re.i

忽略大小寫

re.l

表示特殊字符集 \w, \w, \b, \b, \s, \s 依賴於當前環境

re.m

多行模式

re.s

' . '並且包括換行符在內的任意字元(注意:' . '不包括換行符)

re.u

表示特殊字符集 \w, \w, \b, \b, \d, \d, \s, \s 依賴於 unicode 字元屬性資料庫

特別強調re.ire.s的用法

眾所周知,html標籤是大小寫不敏感的,所以我們需要re.i其次html中..等一些標籤裡面是包含換行符的。而我們為了保留原來文字的特點包括換行符,所以需要re.s.可以匹配換行符

實現字元的清洗工作,否則,jieba詞庫會將全形數字全部分開。而且,清洗後的半形文字更適合**

小姿勢

中文文字永遠是全形,只有英文本母、數字鍵、符號鍵才有全形半形的概念,乙個字母或數字佔乙個漢字的位置叫全形,佔半個漢字的位置叫半形

全形半形轉換說明

全形字符unicode編碼從65281~65374 (十六進製制 0xff01 ~ 0xff5e)

半形字元unicode編碼從33~126 (十六進製制 0x21~ 0x7e)

空格比較特殊,全形為 12288(0x3000),半形為 32(0x20)

**實現

def q2b(_char):#全形轉半形

if65281

<=

ord(_char)<=

65374:

_char =

chr(ord(_char)-

65248)

elif

ord(_char)==

12288:

_char =

chr(32)

return _char

def isq(char):

return

true

if (65281

<=

ord(char)<=

65374

orord(char)==

12288) else

false

def b2q(_char):#半形轉全形

if33

<=

ord(_char)<=

126:

_char =

chr(ord(_char)+

65248)

elif

ord(_char)==

32: _char =

chr(12288)

return _char

def isb(char):

return

true

if (33

<=

ord(char)<=

126or

ord(char)==

32) else

false

標準的html**中的文字內容是不會出現'<'/' '等這些字元的。現在很多任務具都會將網頁文字內容處理成標準形式再發布。我們這裡討論的就是標準的html**及文字內容

html字元實體查詢位址

為了方便討論,我們這裡取了幾個常用的作為示範,並且構造以下dict

html_char = {}

html_char['"'] = html_char['"']=

'"'html_char['''] = html_char['''] =

"'"html_char['&'] = html_char['&'] =

'&'html_char['<'] = html_char['<'] =

'<'

html_char['>'] = html_char['>'] =

'>'

html_char[' '] = html_char[' ']=

' '

難點重點就在這裡,做了很多準備工作,幸好python比較方便,其他語言的玩家可以借鑑一下思路

正則code實現去標籤[^1]

...

#cdata 部分由 "" 結束:

cdata_rule = re.compile(r'',re.i | re.s)

#去除指令碼(隨時會出現)

script_rule = re.compile(r'

"""print(clean_html(test_html,'】15'))

if__name__

=='__main__':

test()

其他指令碼引用

在python的其他程式中,可以直接from clean_html import clean_html進行方便的呼叫(假設這個指令碼名字為clean_html.py)完善

補充字元實體(可以用爬蟲爬下來,有空弄一下)

html標籤可能因為前端框架不同而有所差異(雖然不大)。但是都有規律,如..等,有規律,正規表示式就容易構建了

自己動手實現html去標籤和文字提取

這裡主要介紹一下re.compile pattern flags 裡面的flags用法 識別符號作用 re.i 忽略大小寫 re.l 表示特殊字符集 w,w,b,b,s,s 依賴於當前環境 re.m 多行模式 re.s 並且包括換行符在內的任意字元 注意 不包括換行符 re.u 表示特殊字符集 w,...

HTML容器標籤和文字標籤

html中的容器級標籤和文本級標籤,css中的塊級元素和行內元素是我們常常拿來比較的四個名詞 行內塊級暫時先不考慮 容器級的標籤可以簡單的理解為能巢狀其它所有標籤的標籤。常見容器級的標籤 div h ul ol dl li dt dd 常見文本級的標籤 span p buis strong em i...

HTML容器標籤和文字標籤

html中的容器級標籤和文本級標籤,css中的塊級元素和行內元素是我們常常拿來比較的四個名詞 行內塊級暫時先不考慮 注 如果標籤巢狀錯誤,可能會發生瀏覽器解析錯誤的情況,只是針對巢狀做的這個。1 容器級的標籤可以簡單的理解為能巢狀其它所有標籤的標籤。2 常見容器級的標籤 div h ul ol dl...