python—【爬蟲】學習_2(正則表示式篇)3.re模組函式的深入理解
阿新 • • 發佈:2018-11-23
1. re.complie()
作用:如果需要重複地使用某個正則表示式,那麼你可以先將該正則表示式編譯成模式物件。complie()函式就幫助我們將正則表示式,編譯成為一個pattern物件。
2.re.search(pattern ,string)
regex.search(string[, pos[, endpos]])
pattern = re.compile("d") >>> result = pattern.search("dog") >>> result # Match at index 0 <_sre.SRE_Match object; span=(0, 1), match='d'> >>> pattern.search("dog", 1) # No match; search doesn't include 但是他並不會返回你需要的字串,而是返回存在的範圍,這時候,就需要group函式。 >> result.group() "d" >> result.start() "0" >>result.end() "1" >>result.span() (0,1)
3.re.findall(pattern,string)返回了一個list
注:如果findall中的pattern包含著子組的話,即用小括號圈起來的,就會把子組內容單獨圈起來。
如果存在多個子組,那麼就會把多個子組組合起來構成元組。
這個時候,為了防止瞎匹配,一般使用(?:的語法進行即可。
3.url.request.urlretrieve(url, filename, reporthook, data)
一般用來直接下載圖片,filename為儲存的名字。後面引數None即可。
貼吧照片爬取:
from urllib import request import re def open_url(url): req = request.Request(url) req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36') page = request.urlopen(req) html =page.read().decode('utf-8') return html def get_img(html): pattern = r'<img class="BDE_Image" src="([^"]+\.jpg)"'#[^"]+表示匹配多個不為^的字元 imglist = re.findall(pattern,html) for each in imglist: filename = each.split("/")[-1] request.urlretrieve(each,filename,None) if __name__ == '__main__': url = "http://tieba.baidu.com/p/5921006596" get_img(open_url(url))