1. 程式人生 > >python爬蟲(4)——正則表達式(一)

python爬蟲(4)——正則表達式(一)

做了 cati 二手房 表達 發展 他能 query nta package

    在前幾篇文章中我們使用了python的urllib模塊,做了一些訪問網頁的工作。現在介紹一個非常強大的工具——正則表達式。在講述正則的時候,我參考了《精通正則表達式(第三版) ---Jeffrey E.F.Friedl》這本書,雖然本書的參考語言並沒有python,但相通之處頗多,可以細讀一部分。

    通常我們在制作爬蟲收集數據的時候,需要對服務器傳輸的數據進行匹配篩選,例如在第二篇文章中下載鏈家二手房頁面的時候,我們只需要房址location和價格price。這時正則表達式就派上用場了。所謂正則表達式,就是一種描述字符串結構模式的形式化表達方法。最初,這套方法用於描述正則文本的,後期發展它的功能變得非常強大。python自從1.5版本起就加入了正則模塊re。一方面,正則描述的是一個對象序列,即當今計算機世界的本質數據結構,另一方面,正則有著極強的結構描述能力。基於這兩點,我們需要好好學習一下正則表達式。

    這次我們使用另外一個模塊——requests,來驗證。首先pip install requests,安裝上這個package。requests的使用看起來比urllib要簡單一些:

 1 #首先我們導入這個包
 2 import requsets
 3 
 4 url="http://www.17jita.com/tab/img/8088.html"
 5 
 6 #GET方法
 7 response=requests.get(url)
 8 #POST方法
 9 response=requests.post(url)
10 
11 #其他
12 response=request.put(url)
13 response=request.delete(url) 14 response=request.head(url) 15 reponse=request.options(url) 16 17 #獲取內容 18 html=response.text 19 print(html)

技術分享圖片

    關於requests模塊,我們可以在以後使用過程中繼續學習。下面我們來看基於正則表達式的re模塊,然後可以用re來匹配網頁上的內容了。

一、正則表達式的規則

    正則表達式有以下幾個元字符,他們各自都有著特殊的含義: . ^ $ * + { } [ ] \ | ( ) 。 例如點號(.)表示匹配除換行符以外的任何字符,管道符(|)則有點類似於邏輯或操作。我們可以在 http://tool.oschina.net/uploads/apidocs/jquery/regexp.html 這個網站上查看正則的手冊。help(re),我們可以看到這些方法:match,fullmatch,search,split,findall......等。

技術分享圖片

下面我們來舉幾個例子。例如我們要對以下這些數據進行匹配“ [email protected] advantage 314159265358 1892673 3.14 little Girl try_your_best 56 [email protected] python3”

1、匹配advantage,我們用search方法來實現,如果匹配成功它會返回位置。

技術分享圖片

可以看到,我們只找到了advantage第一個字母a的位置span=(21,22)。如果要想匹配整個單詞呢?

技術分享圖片

  可以看到我們match到了advantage。其中 (.) 表示匹配除了換行符體外的任何字符, (+) 表示匹配前面的子表達式一次或者多次。

2、匹配郵箱地址

技術分享圖片

    其中中括號裏面的0-9表示0123456789,a-z表示26個字母,{}表示匹配裏面的內容一次或多次。這次我們用findall(),他能找出所有滿足正則規則的字符串,並返回這些字符串。當然,上面的規則可以繼續完善,以至於可以匹配任何的郵箱。

    在下一篇我們將解決匹配ip地址的問題,並且從網站上爬取可用ip。

python爬蟲(4)——正則表達式(一)