第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Python 原生爬蟲教程 Python 原生爬蟲教程 11 使用正則表達(dá)式進行頁面提取

使用正則表達(dá)式進行頁面提取

上節(jié)課我們學(xué)習(xí)了如何使用 BeautifulSoup 來解析頁面,這節(jié)課我們來學(xué)習(xí)下如何使用正則來解析頁面。

  • 正則表達(dá)式的基本概念
  • 正則表達(dá)式基本語法
  • 正則表達(dá)式常用函數(shù)

通過學(xué)習(xí)正則表達(dá)式幾個常用函數(shù),可以根據(jù)需要對數(shù)據(jù)進行匹配篩選。

1. 正則表達(dá)式簡介

在編寫爬蟲的過程中,我們需要解析網(wǎng)頁的內(nèi)容。那么作為文本解析利器的正則表達(dá)式當(dāng)然可以運用到我們的爬蟲開發(fā)中。其實頁面解析過程無非是從海量的字符串中將我們所需要的數(shù)據(jù)匹配并剝離出來,所以在正式的爬蟲開發(fā)中正則會經(jīng)常被用到。

正則表達(dá)式是對字符串操作的邏輯公式。在提取網(wǎng)頁的數(shù)據(jù)的時候,我們需要把源代碼轉(zhuǎn)換成字符串,然后通過正則表達(dá)式匹配想要的數(shù)據(jù)。

在我們開始使用正則表達(dá)式進行模式查找之前,我們需要先熟悉一下正則表達(dá)式里面的字符的基本含義,熟悉了它們之后,我們就可以很方便的書寫一些正則表達(dá)式進行模式匹配了。

2. 正則表達(dá)式基本語法

正則表達(dá)式的字符和含義

模式 描述
. 匹配任意字符, 除了換行符
* 匹配前一個字符0次或者多次
+ 匹配前一個字符1次或者多次
? 匹配前一個字符0次或者1次
^ 匹配字符串開頭
$ 匹配字符串結(jié)尾
() 匹配括號內(nèi)的表達(dá)式,表示一個組
\s 匹配空白字符
\S 匹配任何空白字符
\d 匹配數(shù)字,等于[0-9]
\D 匹配非數(shù)字,等于[^0-9]
\w 匹配字符數(shù)字,等于[A-Za-z0-9]
\W 匹配非字符數(shù)字,等于[^A-Za-z0-9]
[] 表示一組字符

3. 正則表達(dá)式的常用方法

我們開發(fā)爬蟲使用的是 Python 語言,那么在 Python 中如何使用正則表達(dá)式呢?在 Python 中已經(jīng)內(nèi)置了正則表達(dá)式模塊 re,re 庫是內(nèi)置在 Python 中的,不需要我們進行安裝,直接導(dǎo)入使用即可。

這里我們主要詳細(xì)講解一下 re 庫中的幾種常用方法。這幾種方法也是會經(jīng)常用在爬蟲開發(fā)中的,只要掌握了這些種方法,基本上在爬蟲開發(fā)中需要使用正則表達(dá)式的問題都可以解決。

3.1 re.findall

findall 方法是找到所有的符合規(guī)則的匹配內(nèi)容,具體語法如下:

re.findall(pattern, string, flags=0)

來看個例子,找出所有的字符串中的數(shù)字:

import re # 導(dǎo)入正則

example = 'abc 33 bbb 3223 yehgst adsfe3 332' # 創(chuàng)建目標(biāo)字符串
pattern = '\d+'
re.findall(pattern, example) 

效果如下圖所示:

圖片描述

3.2 re.search

re.search 掃描整個字符串,并返回第一個成功的匹配。具體語法如下:

re.search(pattern, string, flags=0)

來看個例子:


import re

example = "Python is the best language!"

re.search('\APython', example)
re.search('\AJava', example)

效果如下圖所示:

圖片描述

3.3 re.match

如果 string 開始的 0 或者多個字符匹配到了正則表達(dá)式樣式,就返回一個相應(yīng)的匹配對象 。 如果沒有匹配,就返回 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()

效果如下:

圖片描述

3.4 re.split

用 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)

效果如下:

圖片描述

3.5 re.sub

返回通過使用 repl 替換在 string 最左邊非重疊出現(xiàn)的 pattern 而獲得的字符串。 如果樣式?jīng)]有找到,則不加改變地返回 string。 repl 可以是字符串或函數(shù);如為字符串,則其中任何反斜杠轉(zhuǎn)義序列都會被處理。 也就是說,\n 會被轉(zhuǎn)換為一個換行符,\r 會被轉(zhuǎn)換為一個回車附,依此類推。 未知的 ASCII 字符轉(zhuǎn)義序列保留在未來使用,會被當(dāng)作錯誤來處理。 其他未知轉(zhuǎn)義序列例如 & 會保持原樣。 向后引用像是 \6 會用樣式中第 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)

例子如下:

圖片描述

3.6 re.subn

行為與 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)

例子如下:

圖片描述

4. 小結(jié)

這一小節(jié),我們學(xué)習(xí)了正則表達(dá)式的基本語法,以及通過多個例子展示了正則表達(dá)式的使用方法,正則表達(dá)式難有一點大, 同學(xué)們需要多加練習(xí),才能牢固的掌握。