python3爬蟲 正規表示式

2021-10-01 19:13:15 字數 2363 閱讀 7434

正規表示式

首先要匯入re庫

其中常用的函式:compile函式

格式為re.complie(pattern[, flags])

pattern : 乙個字串形式的正規表示式

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.x 為了增加可讀性,忽略空格和』 # '後面的注釋

常用的.表示匹配任意字元,*?表示任意內容

re裡match,search,findall的區別?

import re

a = 『abc1d2ef3y』

b = 『3721a3690』

resulta = re.match(』[0-9]』, a)

print(resulta)

#列印結果是none,就是沒有匹配到,為什麼沒有匹配到呢,a中明明包含的有數字啊,因為match是從字串的第乙個字元開始匹配

#而a這第乙個字元是a,是個字母,不是0到9的任意乙個數值,所以沒有匹配到,返回結果是none

resultb = re.match(』[0-9]』, b)

print(resultb)

#列印結果是,匹配結果是3,位置是從0開始到第1個分片擷取的數值就是3。

『』』如何拿到match匹配到的結果?

『』』if resultb:

print(「正則表達是match匹配到的結果是:」, resultb.group())

##輸出結果是3。 為什麼要判斷一下,因為如果match不到值,同時用group方法的話就會導致程式報錯,所以要先判斷下是否有值

resultc = re.search(』[0-9]』, a)

print(resultc)

##列印結果是,這個和用match有明顯的區別,索引位置是3-4

#這是從第乙個開始,沒有規定說第乙個必須是規則中寫的0-9的任意數字,即全域性匹配

resultd = re.findall(』[0-9]』, a)

print(resultd)

##列印結果是[『1』, 『2』, 『3』],找所有能匹配到的東西,統統拿出來,結果是個列表

可以發現比較明顯的區別是如果match和search都是遇到第乙個即返回,match只匹配開頭,search是發現符合的就返回,還是findall比較符合實際需求

findall實戰

import re

pattern = re.compile(』.?this_is_a_test.?>(.?).?data2:(.?)』,re.s)

html=』.hello,this_is_a_test,end>here is the data data2:this is data2』

items = re.findall(pattern, html)

print(items)

輸出:通過(.?)和前後文來構造想要資料正規表示式

爬蟲實戰

def main():

url = 『

html = get_one_page(url)

print(html)

main()

發現爬取後又有亂碼的情況存在,初步猜測是中文解碼失敗

搜尋後發現原因:《http權威指南》裡第16章國際化裡提到,如果http響應中content-type欄位沒有指定charset,則預設頁面是』iso-8859-1』編碼。這處理英文頁面當然沒有問題,但是中文頁面,就會有亂碼了,將編碼方式改為utf-8即可

在其中按下ctrl+f搜尋今天,明天,檢視對應標籤

再看下明天

輸出:

python3 爬蟲 正規表示式學習

常用匹配規則 re.match方法 從字串開頭開始匹配,一旦開頭不匹配,就會匹配失敗 import re content hello 1234567 world this is a regex demo print len content result re.match hello s d swor...

python3正規表示式

正規表示式,又稱規則表示式。英語 regular expression,在 中常簡寫為regex regexp或re 電腦科學的乙個概念。正規表示式通常被用來檢索 替換那些符合某個模式 規則 的文字。正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個...

Python3 正規表示式

常用的匹配模式 正規表示式是乙個特殊的字串行,它能幫助你方便的檢查乙個字串是否與某種模式匹配。re 模組使 python 語言擁有全部的正規表示式功能。re.match函式 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match...