用python寫爬蟲-re模塊

re模塊中最常用到三個函數的是match,search,findall。
不過他們都能匹配字符串,不過又稍有不同。

基本格式

re.findall/match/search("匹配規則/pattern", "要匹配的字符串")

pattern

我一般用到的情況都是準長這樣子 開頭內容(.星號?)結尾內容
點代表的是任意字符。星號代表的是取 0 至 無限長度,問號代表的是非貪婪模式。

比如要匹配下面字符串中的url
tx ='"pic_middle":"http://wx4.sinaimg.cn/wap360/50a6dcc7ly1fud4g29v0tj22c0340kjl.jpg","pic_big":'
'"pic_middle":"http://wx2.sinaimg.cn/wap360/50a6dcc7ly1fud4g3lbhkj22c02lub29.jpg","pic_big":'
求url地址的pattern就是"pic_middle":(.*?),"pic_big":

非貪婪模式

這是說遇到第一個結尾匹配,"pic_big":就結束了,所以結果就是http://wx2.sinaimg.cn/wap360/50a6dcc7ly1fud4g3lbhkj22c02lub29.jpg
假如不加?的話,就會變成我看看后面還有沒有,"pic_big":額,還有呢,那就把所有的內容都返回吧,就會變成這樣。
"http://wx4.sinaimg.cn/wap360/50a6dcc7ly1fud4g29v0tj22c0340kjl.jpg","pic_big":' \ '"pic_middle":"http://wx2.sinaimg.cn/wap360/50a6dcc7ly1fud4g3lbhkj22c02lub29.jpg"

返回結果

findall返回的是list
match只能找字符串開頭與pattern相匹配的,不一樣就返回None。
search是一旦找到匹配的就返回,不會去找后來匹配的,都找不到返回None
他們兩個返回都是object,要得到具體的匹配內容,要用group。
group是pattern中的()的個數,group(0)是所有查找的內容,group(1)是第一個括號中查找的內容,group(2)是第一個括號中查找的內容...像這樣


image.png

比如要匹配字符串是
match:


search,看起來跟match是一樣的額,



但是一旦字符串的開頭不是匹配字符,match就不能用了


findall


findall

正則表達式在爬蟲里用的不多,一般來說,html格式都能用beautiful soup,pyquery之類來解析,json能用json模塊來解析,re模塊我用的最多的是把返回的json數據中含有其他信息,不好用pandas.read_json讀取數據變成dataframe,比如這樣的數據:


image.png

就需要re把data后面的數據提取出來。這時用search即可。
有時json結構及其繁瑣,想將所有url提取出來,findall也能勝任。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。