提取資料步驟:建立正則物件-->匹配查詢-->提取資料儲存;
知識點:
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...