爬蟲5·正則表達式

正則表達式

正則表達式是對字元串操作的一套邏輯公式。就是用事先定義好的一些特定的在字元及其組合,組成一種「規則」,用這個「規則」,對原始的字元串序列做過濾操作,提取對我們有用的信息。在Python中,用re模塊實現正則表達式。

推薦一個傻瓜式正則表達式工具

在線正則表達式測試?

tool.oschina.net

有時候,一般的解析庫諸如beautifulsoup、query等不能很好地應對一些將信息隱藏在變數中的網頁源碼,這時候需要用正則表達式將關鍵信息過濾出來。

關於正則表達式具體的用法,其他博主比我講的到位,在此推薦一個。

Python正則表達式指南 - AstralWind - 博客園?

www.cnblogs.com圖標

下面就正則表達式,在豆瓣上實戰演練一下~!

初步的PA豆瓣電影

import requests
response=requests.get(https://movie.douban.com/chart)
print(response.text)

在列印輸出網頁源碼後,我們需要先觀察,明確我們需要找那些信息。包括電影名、上映時間(地區)、影星等。

書寫正則表達式的時候,注意常常需要通過網頁標籤來尋找關鍵信息,其次,你所找到的標籤需要和你的信息完全一一對應才行,不然可能多找或者少找。盡量使用泛匹配和非貪婪匹配即(.*?)。

content=response.text
result=re.findall(<a href="https://movie.douban.com/subject/.*?>(.*?)/ <span.*?<p class.*?>(.*?)/(.*?)/(.*?)/(.*?)/.*?</p>,content,re.S)
for result in result:
print(result[0].strip(),result[1].strip(),result[2].strip(),result[3].strip()) #strip方法去掉換行符

這樣我們就查找出了該頁面所有關鍵信息。

一出好戲 2018-08-10(中國大陸) 黃渤 舒淇
網路謎蹤 2018-01-20(聖丹斯電影節) 2018-08-24(美國) 約翰·趙
蟻人2:黃蜂女現身 2018-07-06(美國) 2018-08-24(中國大陸) 保羅·路德
動物世界 2018-06-29(中國大陸) 李易峰 邁克爾·道格拉斯
毒液:致命守護者 2018-10-05(美國) 2018-11-09(中國大陸) 湯姆·哈迪
快把我哥帶走 2018-08-17(中國大陸) 張子楓 彭昱暢
巨齒鯊 2018-08-10(美國) 2018-08-10(中國大陸) 傑森·斯坦森
碟中諜6:全面瓦解 2018-07-27(美國) 2018-08-31(中國大陸) 湯姆·克魯斯
解除好友2:暗網 2018-03-09(西南偏南電影節) 2018-07-20(美國) 科林·伍德爾
特工 2018-05-11(戛納電影節) 2018-08-08(韓國) 黃政民

初步PA豆瓣讀書

難度再加大一點,pa豆瓣讀書的頁面。

response=requests.get(https://read.douban.com/kind/100)
content=response.text
print(content)

為什麼難度略大,通過網頁源碼,我們可以看到:有的書籍的價格是打過折的(打折書還有原始價格標籤最為干擾項),有的是免費的,它們對應的標籤不同。所以我們首先需要過濾掉原始價格。

content=re.sub(<s class="original-tag">.*?</s>,,content)
print(content)

過濾掉原始價格標籤後,我們需要通過兩種價格標籤來查找。或運算注意用括弧括起來。

另外,我們可以將整個規則用re.compile「打包」,方便以後的直接調用。

rule=re.compile((price">|price-tag ">)(.*?)</span>.*?class="title">.*?>(.*?)</a>.*?author-item.*?>(.*?)</a>.*?rating-average">(.*?)</span>,re.S)
result=re.findall(rule,content)
for result in result:
price,name,rating=result[1],result[2],result[3]
print(price,name,rating)

這樣我們就找到了該頁面所有的關鍵信息。

2.99元 月亮與六便士(插圖珍藏版) 〔英〕毛姆
5.99元 三體全集 劉慈欣
9.99元 殺死一隻知更鳥 〔美〕哈珀·李
19.99元 活著 余華
0.99元 人間失格 〔日〕太宰治
8.99元 追風箏的人 〔美〕卡勒德·胡賽尼
1.99元 面紗 〔英〕威廉·薩默塞特·毛姆
5.99元 創業時代 付遙
6.99元 笑場 李誕
1.99元 月亮和六便士 〔英〕威廉·薩默塞特·毛姆
1.99元 1984 〔英〕 喬治·奧威爾
9.90元 宇宙超度指南 李誕
免費 高智商犯罪:死神代言人 紫金陳
9.99元 房思琪的初戀樂園 林奕含
0.99元 局外人 〔法〕阿爾貝·加繆
免費 高智商犯罪:物理教師的時空詭計 紫金陳
免費 沉淪 郁達夫
9.99元 守夜者2:黑暗潛能 法醫秦明
21.99元 雲邊有個小賣部 張嘉佳

推薦閱讀:

TAG:正則表達式 | Python | 爬蟲(計算機網路) |