這裡主要介紹一下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.i
和re.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...