前兩天小編整理一份爬蟲的資料,不知道大傢伙是否還記得,這一次小編結合所學習的內容,跟大家分享分享。
大家可以給小編提提意見,今天主要分享的是使用正則表達式解析網頁。
Python爬蟲是非常重要的板塊,學起來剛開始有一些迷茫,慢慢的熟悉之後就變成“老司機”,相信剛開始學習python的小夥伴也能和小編一樣,可以學著自己分享一下一些東西。
每一個上班族或者就算宅在家的人,每天都需要打開網頁搜索資料,所以今天我們就利用Python爬蟲,來解析網頁。
話不多少,下面正式開始分享
認識正則表達式
正則表達式就是對字符串進行操作的邏輯公式,相當於‘過濾’這個字符串。
一開始學習可能是懵懂的,小編就是這樣,後來一直不停的複習,總算是學會了。
常用的正則表達式
單字符:
. : 除換行以外所有字符
[] :[aoe] [a-w] 匹配集合中任意一個字符
\\d :數字 [0-9]
\\D : 非數字
\\w :數字、字母、下劃線、中文
\\W : 非\\w
\\s :所有的空白字符包,括空格、製表符、換頁符等等。等價於 [ \\f\\n\\r\\t\\v]。
\\S : 非空白
數量修飾:
* : 任意多次 >=0
+ : 至少1次 >=1
? : 可有可無 0次或者1次
{m} :固定m次 hello{3,}
{m,} :至少m次
{m,n} :m-n次
邊界:
$ : 以某某結尾
^ : 以某某開頭
分組:
(ab)
貪婪模式: .*
非貪婪(惰性)模式: .*?
re.I : 忽略大小寫
re.M :多行匹配
re.S :單行匹配
re.sub(正則表達式, 替換內容, 字符串)
re.match方法
這裡直接來講解正則表達式的re.match方法:
先上一批代碼:
import re
test=re.match('www','www.baidu.com')
print('result:',test)
print('begin and end tuple:',test.span())
print('begin:',test.start())
print('end:',test.end())
利用re.match方法,結果為:
result: <re.match>
begin and end tuple:(0, 3)
begin:0
end:3
span()是匹配結果的開始位置和結束位置
start()和end()則是分別開始和結束。
下面試著把pattern進行一些改變:
import re
pattern='Cats are smarter than dogs'
test=re.match(r'(.*) are (.*?) dogs',pattern)
print('the whole sentence:',test.group(0))
print('the first result:',test.group(1))
print('the second result:',test.group(2))
print('a tuple for result:',test.groups())
最終結果,你會得到:
the whole sentence: Cats are smarter than dogs
the first result: Cats
the second result: smarter than
a tuple for result: ('Cats', 'smarter than')
注意:r表示純字符,防止反斜槓轉譯。
()裡面小編這裡用的是嵌入正則表達式,所以就最後匹配了Cats和smarter than。
re.search方法
re.match只從字符串開始進行匹配,請看下面代碼:
import re
link='www.baidu.com'
print(re.match('baidu',link))
print(re.search('baidu',link))
結果顯示:
None
<re.match>
從這裡就可以看到,這兩者的區別,match發現開頭沒有就直接返回None了,而search則從頭掃描到尾。
re.findall方法
這個就是比較牛掰的方法,也是小編常用的,因為它可以找到所有的匹配。比如:
import re
link='www.baidu.com www.baidu,com'
print(re.match('www',link))
print(re.search('www',link))
print(re.findall('www',link))
結果如下:
<re.match>
<re.match>
['www', 'www']
我們可以看到Match和search只能返回一個www,但是使用findall可以找到所有的哦,所以小編可以推薦大家使用re.findall方法,不過也要根據自己情況而定。
這三種方法,小編做了稍微的總結,用一句話概括:一山還比一山高。
search比Match用起來則更加靈活,findall又比前兩者爬取到更多網頁知識,整體學起來是不是很難,主要是需要對症下藥,找到合適的匹配規則。
其實小編學習python爬蟲時間並不長,在此期間加入了一個學習python的社群,天天與學習python的童鞋們交流分享,不懂的問題也有助教老師幫我們分析,所以說掌握知識很簡單,如果你也想加入我們這個大家庭,歡迎來私信小編~
如果你對這篇文章感興趣,或者你身邊的人正在學習python,可以分享給朋友們一起交流學習。
閱讀更多 Q小小科技 的文章