python爬蟲 正則解析方式

2021-10-01 09:35:04 字數 2904 閱讀 5871

提取資料步驟:建立正則物件-->匹配查詢-->提取資料儲存;

知識點:

1.單字元:

. : 除換行以外所有字元

:[aoe] [a-w] 匹配集合中任意乙個字元

\d :數字 [0-9]

\d : 非數字

\w :數字、字母、下劃線、中文

\w : 非\w

\s :所有的空白字元包,括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。

\s : 非空白

2.數量修飾:

* : 任意多次 >=0

+ : 至少1次 >=1

? : 可有可無 0次或者1次

:固定m次 hello

:至少m次

:m-n次

3.邊界:

$ : 以某某結尾

^ : 以某某開頭

4.分組:

(ab)

貪婪模式 .*

非貪婪(惰性)模式 .*?

re.i : 忽略大小寫

re.m :多行匹配

re.s :單行匹配

re.sub(正規表示式, 替換內容, 字串)

應用舉例一:

import re

line = "bobby123"

regex_str = "^b.*"

# 必須以b開頭,任意字元匹配

(^控制開頭字元)

regex_str1 = "^b.3$"

#(.*3$)必須以3結尾;

(^b.3$)不能執行成功,若改為(^b.*3$)則可以;

($控制結位字元,.表示匹配任意字元,*表示匹配的次數)

if re.match(regex_str,line):

print("yes")

應用舉例二:貪婪匹配模式和非貪婪匹配模式的區分

ps: .*?為非貪婪匹配模式 ;     貪婪匹配:反向匹配;

line2 = "boooooooobby123"

regex_str2 = ".*(b.+b).*"

regex_str2 = ".*(b.*b).*"

regex_str2 = ".*(b.b).*"#匹配兩次以上

regex_str2 = ".*(b.b).*" #匹配兩次以上5次一下

regex_str2 = "( (boooooooobby|bobby)123)" #(|為或;雙重()號則為全匹配)

regex_str2 = "([abcd]ooby)123"#(括號表示符合括號在內都行;符合abcd任意都行)

應用舉例三:中括號用途例子

[.*]  中括號內.*不代表模式匹配;

[^] 取反 不等於;

**號匹配 line = 『18782902222』

regex_str2 = 「1[48357][0-9]」#區間0-9出現9次

regex_str2 = 「1[48357][^1]」#數字不等於1出現9次

#非貪婪匹配:  

regex_str2 = ".*?(b.*b).*?" 

match_obj = re.match(regex_str2,line2)

if match_obj:

print(match_obj.group(1))

注意:match()函式 從字串起始位置匹配;

group()可以返回match物件中匹配的值;

其他函式 :compile() search() findall() finditer() split() sub()

參考:應用舉例四:提取中文

[\u4e00-\u9fa%]  :提取中文

line = 「study in 南京大學」

ewgex_str = 「.*?( [\u4e00-\u9fa%]+大學)「

#(.*匹配任意字元) 輸出:京大學

#(.*?匹配任意字元) 輸出:南京大學即為非貪婪匹配

match_obj = re.match(regex_str,line)

if match_obj:

print(match_obj.group(1))

應用舉例五:(\d  :代表數字 提取連續數字\d+)

line = 「xx出生於2023年」

ewgex_str = 「.*?(\d+)年」

ewgex_str = 「.*(\d+)年」#限定四次;

#(.*匹配任意字元) 輸出:2001

#(.*?匹配任意字元) 輸出:2001

match_obj = re.match(regex_str,line)

if match_obj:

print(match_obj.group(1))

import re

line = 「***出生於2023年6月1日」

line = 「***出生於2001/6/1日」

line = 「***出生於2001-6-1」

line = 「***出生於2001-06-01」

line = 「***出生於2001-06」

regex_str = 「.*出生於(\d[年/-]\d([月/-]\d|[月/-]$|&))」

match_obj = re.match(regex_str,line)

if match_obj:

print(「yes」)

python爬蟲 資料解析(正則)

正則解析案例 爬取糗事百科的 糗事百科url 檢視網頁源 發現儲存的位址 import requests import re import os if name main headers 判斷是否存在qiushi資料夾,如果不存在就建立乙個 ifnot os.path.exists qiushi o...

爬蟲解析方式

對於爬蟲解析來說,常見的解析方式有幾種 正規表示式 一種萬能的解析方式,是一種模式,可以匹配文字片段的模式來處理字串,但是編寫正規表示式不方便,常用的可有re ret re.findall a eva egon yuan 返回所有滿足匹配條件的結果,放在列表裡 print ret 結果 a a re...

python爬蟲 正規表示式解析

re.i 忽略大小寫 rtuhsgqe.m 多行匹配,將正則作用到源資料的每一行 re.s 單行匹配,將正則作用到整個源資料,輸出乙個整體字串 包括換行符也列印 string fall in love with you i love you very much i love she i love h...