【每天幾分鐘,從零入門python編程的世界!】
之前我們介紹過正則表達式對象的findall方法,它是找到所有匹配的字符串。這節我們介紹findall方法的另外的用法。
我們在360瀏覽器通過360搜索「360聯繫方式」,我們會看到搜索結果頁中,聯繫方式是下面的這種:
我們點擊上圖所示頁面的「奇虎360 客服電話」,打開360公司的「聯繫我們」頁面,
然後右鍵點擊「查看原始碼」:
打開的頁面上的原始碼是這樣:
我們把原始碼複製到我們的Spyder中,用一個變量text來保存,原始碼前後各用3個引號包裹,這樣就相當於把這個原始碼作為一個很長的字符串。
假設我們面前有這麼一個很長的字符串,我們靠肉眼去查找裡面的聯繫方式是比較累眼睛的,那麼我們用Python以及正則表達式的findall方法,在這些原始碼字符串中尋找360的聯繫方式,讓程序來幫我們做事情就更方便省勁還很準確。
我們剛才搜索到的360聯繫方式的結果頁面,看到聯繫方式都是用兩個橫槓連接,橫槓前後都是3個或者4個數字這樣的規律的電話號碼。
那麼我們的正則表達式就可以寫作:r"\d{3,4}-\d{3,4}-\d{3,4}"。
因為我們搜索看到的網頁上,360的聯繫方式有多個電話號碼,所以我們複製的網頁原始碼中也自然會有很多聯繫電話,所以我們就用findall這個函數來尋找這些電話號碼。因為search函數和match函數都只能找到一個匹配的結果,所以我們用findall方法尋找。
代碼如下:
如上圖所示,由於網頁原始碼的字符串太長了,第20行到673行的部分都是網頁原始碼字符串,就省略不截取出來了。
運行結果:
我們看到通過正則表達式尋找並列印出來的360聯繫方式,是一個列表的形式。因為findall函數的返回結果就是列表。
我們還可以在正則表達式中再加上括號,這樣返回的結果就是一個以元組為元素的列表。
代碼如下:
運行結果:
因為findall的返回結果是一個列表,列表是可迭代對象,它的元素是按順序的排列的,這就方便我們再去找到這個列表的元素,然後對找到的元素進行操作。這就是一個很有用的特性。
findall還有其他的用法,以後遇到再去學習。
我是時問新,歡迎關注我。跟我一起從零開始學習Python,每天花一點時間,開啟python編程新世界的大門,領略新的風光,讓人生多一種可能!