最近在準備數學建模大賽,其中一題要求用到豆瓣電影的top50資料
我的python學習進度剛好學到正規表示式
於是便嘗試使用python爬取豆瓣的網頁資料
由於只學到txt資料的提取,於是我用了比較原始的方式——複製網頁文字到txt檔案,再使用python遍歷
需要提取的資訊示例:
9.7 2090560人評價 希望讓人自由。
9.6 1550401人評價 風華絕代。
9.5 1579058人評價 一部美國近現代史。
4這個殺手不太冷 這個殺手不太冷 / léon / 殺手萊昂 / 終極追殺令(臺) 導演: 呂克·貝松 luc besson 主演:
讓·雷諾 jean reno / 娜塔莉·波特曼 … 1994 / 法國 美國 / 劇情 動作 犯罪
9.4 1768777人評價 怪蜀黍和小蘿莉不得不說的故事。
9.4 1532631人評價 失去的才是永恆的。 『』』
導演資訊提取:
directorregex = re.
compile
(r'(導演: )(\w+(?:·\w+)*(?:·\w+)* )(\w+(?:\w\w+)*(?:\w\w+)*)?'
)
groups[0] 提取了匹配出來的 『導演:』
groups[1] 提取了導演的中文名
其中括號的使用是乙個比較值得注意的地方
若使用 findall 方法提取,將返回乙個groups列表,在 regex 變數中的每兩個最外層括號代表一組,匹配出的groups字串列表分別對應每個括號中匹配的內容,當括號外使用 " ? " 符號時,匹配零次的字串在列表中表示為 none,返回groups列表的長度仍然與最外層括號數量一致。
關於最外層括號,若想使括號不分組,則在括號內的表示式前加上 ?: 例如表示式:(?:·\w+)* ,在外層括號內若要使用括號,最好也使用不分組括號,以避免出錯。
排名資料提取:
rankingregex = re.
compile
('(\d)([\u4e00-\u9fa5]+|[\u4e00-\u9fa5]+[\w\d][\u4e00-\u9fa5]+)\\n'
)
其中 " [\u4e00-\u9fa5]+ " 可提取多個中文字元,同時要注意 [ ] 和 ( ) 的區別,前乙個方括號表示包含裡面任一元素,可以使用 - 表示從某元素到某元素,後乙個圓括號則表示包含裡面全部元素才能進行匹配
在匹配換行符時 使用 \n 轉義後才能使用,若使用原始字串則不需要
上面的 rankingregex 的後半部分比較複雜,是因為有部分影片名字中間夾雜著符號與數字
在使用管道 | 時,例如( | | ),其中 | 與( )之間的所有元素都會被匹配
拍攝國家資料提取:
countryregex = re.
compile
(r'''(
[ ](美國|英國|中國大陸|中國香港|中國台灣|印度|義大利|法國|日本|南韓|黎巴嫩|德國|瑞士|加拿大|紐西蘭)
[ ](美國|英國|中國大陸|中國香港|中國台灣|印度|義大利|法國|日本|南韓|黎巴嫩|德國|瑞士|加拿大|紐西蘭)?
[ ]?
(美國|英國|中國大陸|中國香港|中國台灣|印度|義大利|法國|日本|南韓|黎巴嫩|德國|瑞士|加拿大|紐西蘭)?
[ ]?
(美國|英國|中國大陸|中國香港|中國台灣|印度|義大利|法國|日本|南韓|黎巴嫩|德國|瑞士|加拿大|紐西蘭)?
)'''
,re.verbose)
此處使用了原始字串 + 多行字串 + re.verbose 方法
新增 re.verbose 引數後,regex變數中所有空白字元將被忽略,如:空格,換行符等等,如果需要匹配空格字元,可以使用方括號 [ ]
上式包含了所有在top50上出現的國家,最多四個,且提取出來後可以根據需求分組:國家1,國家2等
剩餘的資訊都可以使用同樣方法提取,此處不再多講
部分提取結果:
以上便是該文章全部內容
能力有限,若有更優的方法可以或者不合理之處儘管指出
06 資料提取 正規表示式
在前面我們已經搞定了怎樣獲取頁面的內容,不過還差一步,這麼多雜亂的 夾雜文字我們怎樣把它提取出來整理呢?下面就開始介紹乙個十分強大的工具,正規表示式!正規表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元 及這些特定字元的組合,組成乙個 規則字串 這個 規則字串 用來表達對字串的一種過...
jmeter 正規表示式提取
我們在做壓測時,經常會碰到需要上個介面的結果作為引數傳遞到下乙個介面,此時需要用到正規表示式提取功能。1 新增jmeter正規表示式提取器 在具體的request下新增jmeter正規表示式提取器 jmeter正規表示式在 後置處理器 下面 例1如下 引用名稱 tokenid 自己定義 模板 1 匹...
正規表示式提取時間
時間的各種格式都可以通過正規表示式來匹配,例如我們想精確匹配hh mm的時間,即包含小時和分鐘,可以使用下面的表示式 0 9 0 0 9 1 0 9 2 0 3 0 5 0 9 0 9 0 0 9 1 0 9 2 0 3 0 5 0 9 更多關於時間和日期的正規表示式,參考 regexlib.pub...