苻玲美
摘要:數(shù)據(jù)是新一輪技術(shù)革命最重要的生產(chǎn)資料,爬蟲是獲取數(shù)據(jù)最直接的方式,但爬出來的數(shù)據(jù)代碼夾雜文字,面對(duì)大量雜亂的代碼夾雜信息,通過正則表達(dá)式檢索匹配出有用的信息,過濾無用的數(shù)據(jù)。本文介紹正則表達(dá)式在python爬蟲中的應(yīng)用,總結(jié)python爬蟲中正則表達(dá)式的應(yīng)用技巧。
關(guān)鍵詞:爬蟲;python;正則表達(dá)式;數(shù)據(jù)
中圖分類號(hào):TP311? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)25-0253-02
網(wǎng)絡(luò)爬蟲是一個(gè)非常注重實(shí)踐性而且實(shí)用性很強(qiáng)的編程技能,寫爬蟲分析股票走勢(shì),上鏈家爬房源分析房價(jià)趨勢(shì),爬知乎、爬豆瓣、爬新浪微博、爬影評(píng),等等。人工智能時(shí)代,對(duì)數(shù)據(jù)的依賴越來越重要,數(shù)據(jù)主要的來源就是通過爬蟲獲取,通過爬取獲取數(shù)據(jù)可以進(jìn)行市場調(diào)研和數(shù)據(jù)分析。但爬蟲時(shí)收集回來的一般是字符流,我們需要從中篩選有用的信息,而用正則表達(dá)式可以輕松地完成這一任務(wù)。
1正則表達(dá)式與爬蟲
爬蟲四個(gè)主要步驟:
· 明確目標(biāo) (要知道你準(zhǔn)備在哪個(gè)范圍或者網(wǎng)站去搜索)
· 爬 (將所有的網(wǎng)站的內(nèi)容全部爬下來)
· 取 (獲取有用信息、去掉沒用的數(shù)據(jù))
· 處理數(shù)據(jù)(按照我們想要的方式存儲(chǔ)和使用)
那么在?。ㄎ谋具^濾這塊)最強(qiáng)大的就是正則表達(dá)式,更是python爬蟲世界必不可少利器。
什么是正則表達(dá)式,python爬蟲使用正則表達(dá)式的方法。
正則表達(dá)式(Regular Expression,簡稱Regex或RE)又稱為正規(guī)表示法或常規(guī)表示法,常常用來檢索、替換那些符合某個(gè)模式的文本,它首先設(shè)定好了一些特殊的字及字符組合,通過組合的“規(guī)則字符串”來對(duì)表達(dá)式進(jìn)行過濾,從而獲取或匹配我們想要的特定內(nèi)容。它具有靈活、邏輯性和功能性非常的強(qiáng),能迅速地通過表達(dá)式從字符串中找到所需信息的優(yōu)點(diǎn)。
正則表達(dá)式的常見語法格式:
在 Python 中,我們可以使用內(nèi)置的 re 模塊來使用正則表達(dá)式。re模塊提供了3個(gè)方法對(duì)輸入的字符串進(jìn)行確切的不同要求查詢。每一個(gè)方法都接收一個(gè)正則表達(dá)式和一個(gè)待查找匹配的字符串。
(1)match()方法- 從頭匹配:
match()方法的工作方式是只有當(dāng)被搜索字符串的開頭匹配模式的時(shí)候它才能查找到匹配對(duì)象。
(2)使用re.search查找 – 匹配任意位置:
search()方法和match()類似,不過search()方法不會(huì)限制我們只從字符串的開頭查找匹配。search()方法會(huì)在它查找到一個(gè)匹配項(xiàng)之后停止繼續(xù)查找。
(3)使用 re.findall – 所有匹配對(duì)象:
在Python中我使用的最多的查找方法是findall()方法。當(dāng)我們調(diào)用findall()方法,我們可以非常簡單地得到一個(gè)所有匹配模式的列表,
2 正則表達(dá)式抓取網(wǎng)絡(luò)數(shù)據(jù)常見方法
在 HTML 中, 基本上所有的實(shí)體內(nèi)容, 都會(huì)有個(gè)成對(duì)的 tag 來框住它。 而這個(gè)被 tag 住的內(nèi)容, 就可以被展示成不同的形式。header 和 body。 在 header 中, 存放這一些網(wǎng)頁的網(wǎng)頁的元信息, 比如說 title, 這些信息是不會(huì)被顯示到你看到的網(wǎng)頁中的. 這些信息大多數(shù)時(shí)候是給瀏覽器看, 或者是給搜索引擎的爬蟲看。HTML 的第二大塊是 body, 這個(gè)部分才是你看到的網(wǎng)頁信息。網(wǎng)頁中的視頻, 圖片和文字等都存放在這里。
tag 就是主標(biāo)題, 我們看到呈現(xiàn)出來的效果就是大一號(hào)的字。 里面的文字就是一個(gè)段落。 里面都是一些鏈接。是層用來存放一塊信息。在html還有很多這樣的tag,信息都是放在這些 tag 中的。爬蟲想要做的就是根據(jù)這些 tag 來找到合適的信息。1)爬取網(wǎng)頁
通過下列操作成功爬取了百度的首頁。
2) 抓取title標(biāo)簽間的內(nèi)容
Print data打印出來抓取的網(wǎng)頁,這就證明了我們能夠成功讀取這個(gè)網(wǎng)頁的所有信息了。但我們還沒有對(duì)網(wǎng)頁的信息進(jìn)行匯總和利用。我們發(fā)現(xiàn)想要提取一些形式的信息,合理的利用 tag 的名字十分重要。我們想用代碼找到這個(gè)網(wǎng)頁的 title,選好要使用的 tag 名稱
title=re.findall(r"
print(title[0])
3)抓取
標(biāo)簽間的內(nèi)容
想要找到中間的那個(gè)段落
的內(nèi)容跟
4)爬取所有的連接的網(wǎng)址。
有些時(shí)候,我們需要獲取網(wǎng)站中所有的超鏈接并保存在文檔里進(jìn)行應(yīng)用。一個(gè)一個(gè)獲取是不現(xiàn)實(shí)的,我們把網(wǎng)頁爬取出來后,用正則表達(dá)式去在索出來。超鏈接在網(wǎng)頁中的格式是:你好,請(qǐng)登錄。網(wǎng)址以href=“開頭,以”結(jié)束。因此正則表達(dá)p=re.findall(rhref=”(.*?)”),data),其中data存放抓取的網(wǎng)頁信息,r進(jìn)行轉(zhuǎn)義。
3 總結(jié)
大數(shù)據(jù)時(shí)代,我們需要海量的信息去分析市場、分析客戶。而爬蟲獲取的數(shù)據(jù)摻雜著大量的代碼和沒用的數(shù)據(jù)。通過 正則表達(dá)式篩選有用的信息,過濾無用的數(shù)據(jù)。本文介紹爬蟲與正則表達(dá)式的關(guān)系,正則表達(dá)式的語法,re模塊的幾種應(yīng)用正則表達(dá)式方法的區(qū)別。最后通過案例總結(jié)了python爬蟲中正則表達(dá)式的使用技巧。
參考文獻(xiàn):
[1]熊暢.基于Python爬蟲技術(shù)的網(wǎng)頁數(shù)據(jù)抓取與分析研究[J]. 數(shù)字技術(shù)與應(yīng)用,2017(9):45-46.
[2]魏冬梅,何忠秀,唐建梅.基于Python的Web信息獲取方法研究[J].軟件導(dǎo)刊,2018, 17(1):41-43.
[3]萬磊,嚴(yán)道波,楊勇,等.基于文本挖掘的95598投訴工單關(guān)鍵信息提取分析[J].電力與能源,2019,40(01):76-78.
[4]Jeffrey E.F.Friedl(著).精通正則表達(dá)式[M].余晟,譯.北京:電子工業(yè)出版社,2008.
【通聯(lián)編輯:聞翔軍】