iT邦幫忙

2021 iThome 鐵人賽

DAY 12
1
自我挑戰組

Python 30天自我挑戰系列 第 12

Day12 - 正則表示式

  • 分享至 

  • xImage
  •  

在昨天我們建立了模型,並可使用管理網站手動增加書籍與作者的資料。

但回顧 Day10所列的需求,實際使用情境上,使用者只需輸入網址,系統需判斷是否為可支援網站,並自動抓取書名和作者等資訊。

預計使用技術如下:

  1. 判斷是否為可支援網站:正則表示式
  2. 根據URL,抓取書名和作者資訊:爬蟲

故在繼續Django挑戰前,今天將先進行正則表示式的練習,以便後續網站開發使用。

使用正則表示式判斷是否為支援網站

正則表示式的比對寫法:

import re

regex = re.compile(r'正則表示式')
target = "欲比對的內容"

result = regex.search(target)
  • re.compile(r'正則表示式'):把正則表示式進行編譯,並產生一個pattern對象,供後續的search()、find()使用。
    • r'正則表示式':r表示後面的字串為原始字串。因為正則表示式會用到很多系統保留符號,故需宣告為原始字串以免Python執行錯誤。

大部分找到的教學網站的寫法,主要流程都是先將正則表示式進行compile(),後續使用complie產生的物件做search(),但今天剛好看到一篇分享,裡面提到其實re模組提供的許多函式中都已包含compile(),故統一事先宣告compile()其實是資源的浪費。

故今天練習的完整程式如下:

import re

# 正則表示式:比對網址pattern,並抓取novelid
regex = r'https?:\/\/www\.jjwxc\.net\/onebook\.php\?novelid=(\d+)'
urlgroup = ( "http://www.jjwxc.net/onebook.php?novelid=3415053",
        "http://www.google.com"
)

for url in urlgroup:
  result = re.search(regex, url)
  if result is None:
    print("Not Match!  URL:" + url)
  else:
    print("Match!")
    print("Group():" + result.group())
    print("Group(1):" + result.group(1))

輸出結果:

Match!
Group():http://www.jjwxc.net/onebook.php?novelid=3415053
Group(1):3415053
Not Match!  URL:http://www.google.com

上一篇
Day11 - 模型與管理網站
下一篇
Day13 - 使用爬蟲套件擷取網頁內容
系列文
Python 30天自我挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言