轉義的 HTML 字符進行轉義。
JavaScript
const unescapeHTML = str =>
str.replace(
/&|<|>|'|"/g,
tag =>
({
'&': '&',
'<': '<',
'>': '>',
''': "'",
'"': '"'
}[tag] || tag)
);
示例代碼:
unescapeHTML('<a href="#">Me & you</a>');
// '<a href="#">Me & you</a>'
更多內(nèi)容請訪問我的網(wǎng)站:https://www.icoderoad.com
義字符串以在 HTML 中使用。
JavaScript
const escapeHTML = str =>
str.replace(
/[&<>'"]/g,
tag =>
({
'&': '&',
'<': '<',
'>': '>',
"'": ''',
'"': '"'
}[tag] || tag)
);
示例
escapeHTML('<a href="#">我 & 你</a>');
// '<a href="#">我 & 你</a>'
更多內(nèi)容請訪問我的網(wǎng)站:https://www.icoderoad.com
節(jié)課我們學習了如何使用 BeautifulSoup 來解析頁面,這節(jié)課我們來學習下如何使用正則來解析頁面。
通過學習正則表達式幾個常用函數(shù),可以根據(jù)需要對數(shù)據(jù)進行匹配篩選。
在編寫爬蟲的過程中,我們需要解析網(wǎng)頁的內(nèi)容。那么作為文本解析利器的正則表達式當然可以運用到我們的爬蟲開發(fā)中。其實頁面解析過程無非是從海量的字符串中將我們所需要的數(shù)據(jù)匹配并剝離出來,所以在正式的爬蟲開發(fā)中正則會經(jīng)常被用到。
正則表達式是對字符串操作的邏輯公式。在提取網(wǎng)頁的數(shù)據(jù)的時候,我們需要把源代碼轉換成字符串,然后通過正則表達式匹配想要的數(shù)據(jù)。
在我們開始使用正則表達式進行模式查找之前,我們需要先熟悉一下正則表達式里面的字符的基本含義,熟悉了它們之后,我們就可以很方便的書寫一些正則表達式進行模式匹配了。
模式 | 描述 |
. | 匹配任意字符, 除了換行符 |
* | 匹配前一個字符0次或者多次 |
+ | 匹配前一個字符1次或者多次 |
? | 匹配前一個字符0次或者1次 |
^ | 匹配字符串開頭 |
$ | 匹配字符串結尾 |
() | 匹配括號內(nèi)的表達式,表示一個組 |
\s | 匹配空白字符 |
\S | 匹配任何空白字符 |
\d | 匹配數(shù)字,等于[0-9] |
\D | 匹配非數(shù)字,等于0-9 |
\w | 匹配字符數(shù)字,等于[A-Za-z0-9] |
\W | 匹配非字符數(shù)字,等于A-Za-z0-9 |
[] | 表示一組字符 |
我們開發(fā)爬蟲使用的是 Python 語言,那么在 Python 中如何使用正則表達式呢?在 Python 中已經(jīng)內(nèi)置了正則表達式模塊 re,re 庫是內(nèi)置在 Python 中的,不需要我們進行安裝,直接導入使用即可。
這里我們主要詳細講解一下 re 庫中的幾種常用方法。這幾種方法也是會經(jīng)常用在爬蟲開發(fā)中的,只要掌握了這些種方法,基本上在爬蟲開發(fā)中需要使用正則表達式的問題都可以解決。
findall 方法是找到所有的符合規(guī)則的匹配內(nèi)容,具體語法如下:
re.findall(pattern, string, flags=0)
來看個例子,找出所有的字符串中的數(shù)字:
import re # 導入正則
example = 'abc 33 bbb 3223 yehgst adsfe3 332' # 創(chuàng)建目標字符串
pattern = '\d+'
re.findall(pattern, example)
效果如下圖所示:
re.search 掃描整個字符串,并返回第一個成功的匹配。具體語法如下:
re.search(pattern, string, flags=0)
來看個例子:
import re
example = "Python is the best language!"
re.search('\APython', example)
re.search('\AJava', example)
效果如下圖所示:
如果 string 開始的 0 或者多個字符匹配到了正則表達式樣式,就返回一個相應的匹配對象 。 如果沒有匹配,就返回 None ;注意它跟零長度匹配是不同的。
re.match(pattern, string, flags=0)
實例:
import re
string = '5523 abc, cde 666623'
pattern = '(\d{4}) (\w{3})'
match = re.search(pattern, string)
match.group(1)
match.group(2)
match.groups()
效果如下:
用 pattern 分開 string 。 如果在 pattern 中捕獲到括號,那么所有的組里的文字也會包含在列表里。如果 maxsplit 非零, 最多進行 maxsplit 次分隔, 剩下的字符全部返回到列表的最后一個元素
re.split(pattern, string)
實例:
import re
string = 'aaabbb 212 dxsxasxw fdexx:3453423.'
pattern = '\d+'
result = re.split(pattern, string)
print(result)
效果如下:
返回通過使用 repl 替換在 string 最左邊非重疊出現(xiàn)的 pattern 而獲得的字符串。 如果樣式?jīng)]有找到,則不加改變地返回 string。 repl 可以是字符串或函數(shù);如為字符串,則其中任何反斜杠轉義序列都會被處理。 也就是說,\n 會被轉換為一個換行符,\r 會被轉換為一個回車附,依此類推。 未知的 ASCII 字符轉義序列保留在未來使用,會被當作錯誤來處理。 其他未知轉義序列例如 & 會保持原樣。 向后引用像是 會用樣式中第 6 組所匹配到的子字符串來替換
re.sub(pattern, replace, string)
實例:
import re
string = 'abc 3d a52a33 adex f45 6'
pattern = '\s+'
replace = ''
new_string = re.sub(pattern, replace, string)
print(new_string)
例子如下:
行為與 sub() 相同,但是返回一個元組 (字符串, 替換次數(shù)).
re.subn(pattern, replace, string)
實例:
import re
string = 'abc 3d a52a33 adex f45 6'
pattern = '\s+'
replace = ''
new_string = re.subn(pattern, replace, string)
print(new_string)
例子如下:
這一小節(jié),我們學習了正則表達式的基本語法,以及通過多個例子展示了正則表達式的使用方法,正則表達式難有一點大, 同學們需要多加練習,才能牢固的掌握。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。