python爬蟲教程小白從零開始項目實戰(5)

python爬蟲教程小白從零開始項目實戰(5)

search()方法

search()的用法和findall的用法一樣,search只會返回滿足第一個滿足要求的字符串一旦找到符合要求的內容,它就會停止查找。
search()的函數原型

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

對於結果,如果匹配成功,則是一個正則表達式的對象;如果沒有匹配到任何數據,就是None。如果需要匹配到的結果,則需要通過.group()這個方法來獲取裏面的值。

import re

content='我的微博密碼是:123456,QQ密碼是:33445566,銀行卡密碼是 :88888888'
password_search=re.search('密碼是:(.*?),',content)
password_search_notfind=re.search('XXX:(.*?),',content)
print(password_search)
print(password_search.group())
print(password_search.group(0))
print(password_search.group(1))
print(password_search_notfind)

輸出結果


<re.Match object; span=(4, 15), match='密碼是:123456,'>
密碼是:123456,
密碼是:123456,
123456      //第四個print
None

只有在.gorup裏面的參數爲1的時候,纔會把正則表達式裏面的括號中的結果打印出來。//第四個print

import re

content='微博賬號是:weibo123,密碼是:123456,QQ賬號是:123456,QQ密碼是:qq123456,'
password_search=re.search('賬號是:(.*?),密碼是:(.*?),',content)
password_search_notfind=re.search('XXX:(.*?),',content)
print(password_search.group(1))
print(password_search.group(2))

輸出結果:
weibo123
123456

參數爲1時候,讀取第一個括號的內容,參數爲2是表示讀取第二個括號的內容

(.*)和(.*?)的區別

在python爬蟲開發中,(.*?)這三個符號大多數情況下一起使用。

1
點號表示任意非換行符的字符。星號表示匹配它前面的字符0次或者任意多次。所以.* 表示匹配一串任意長度的字符串任意次。這個時候必須在.* 的前後加其他符號來限定範圍,否則的結果就是原來的整個字符串。
2
.*? 問號表示匹配它它的符號0次或者1次。於是.*?意思是匹配一個能滿足要求的最短字符串。
舉例說明

代碼自己敲一下

使用.*得到的是隻有一個元素的列表,裏面是很長的字符串.
.*? 得到的結果是包含3個元素的列表,每個元素直接對應原來文本中的每個密碼.
舉一個例子,10個人肩並肩並排站着,使用“(.*)” 取到了第1個人左手到第10個人右手之間的所有東西,而使用“(.*? )”取到的是“每個人”的左手和右手之間的東西。一句話總結如下。
①“.”:貪婪模式,獲取最長的滿足條件的字符串。
②“.
?”:非貪婪模式,獲取最短的能滿足條件的字符串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章