日常生活中,每個人都有關注的事情,像是演唱會門票的開賣、喜歡的商品降價或新電影上檔等,而為了要及時自動取得這些資訊,Python網頁爬蟲就被廣泛的使用,除了將爬取的資訊透過
[Python實戰應用]Python寄送Gmail電子郵件實作教學文章介紹的電子郵件進行通知外,另一個備受歡迎的接收通知管道就是LINE。
而LINE官方提供了LINE Notify的服務,只要完成和LINE網站的連動設定,就可以透過LINE Notify推播或傳送訊息至目標使用者的LINE中。
本文即以Udemy線上課程網站為例,利用Python網頁爬蟲關注想購買的線上課程,只要低於指定的價格,就透過LINE Notify服務傳送訊息給使用者。本文的重點包含:
- 登錄LINE Notify服務
- 發行LINE Notify權杖(Token)
- 整合Python網頁爬蟲及LINE Notify服務
一、登錄LINE Notify服務
首先,前往LINE Notify官網,來進行Python網頁爬蟲與LINE Notify的連動設定,如下圖:
點選右上角的登入,輸入LINE帳號及密碼,如下圖:
成功登入後,就可以看到「管理登錄服務」頁面,如下圖:
接著,點擊「登錄服務」,輸入LINE Notify服務的基本資料,由於本文的Python爬蟲是跑在本機上,所以「服務網址」及「Callback URL」皆為http://127.0.0.1,如下範例:
填寫完成後,點擊「同意並前往下一步」,就可以看到剛剛所輸入的基本資料,確認沒問題點選「登錄」按鈕即可,如下範例:
這時後LINE Notify會發送認證郵件到登錄服務時,所填寫的電子郵件帳號中,如下圖:
完成電子郵件認證後,點擊「前往服務一覽」,可以看到LINE Notify配發了一個Client ID(帳號)給我們,如下圖:
而密碼則需點擊服務,才可以看到,如下圖:
以上就完成了LINE Notify服務的基本資料登錄了。
二、發行LINE Notify權杖(Token)
有了的服務帳號及密碼後,接下來,就可以向LINE Notify取得權杖(token),各位可以把它想像是一張活動的門票,只要參加者有這張門票,就可以進入會場,並且主辦單位會為參加者提供多樣的服務。
同樣的道理,只要程式碼中帶有LINE Notify所給的權杖(token),LINE Notify就會為你提供傳送訊息的服務。
回到LINE Notify官網,點擊右上角姓名旁的箭頭,選擇「個人頁面」,如下圖:
這時候就可以看到「發行權杖」的按鈕,如下圖:
點擊後進入後,首先填寫「權杖名稱」,再選擇要將訊息傳送給誰。這邊的「權杖名稱」,會出現在訊息的開頭,之後才接著自訂的訊息,有點像訊息標題的概念,如下圖:
點擊發行,就可以看到LINE Notify服務的權杖(token),如下圖:
這邊要特別注意,離開頁面後,就不會再產生新的權杖(token)了,所以記得馬上複製起來。
三、整合Python網頁爬蟲及LINE Notify服務
取得了LINE Notify的權杖(token)後,現在就能請它幫我們傳訊息了。本文利用Python的BeautifulSoup套件,開發了一個Python網頁爬蟲,爬取某個課程的目前價格,如下範例:
from bs4 import BeautifulSoup import requests response = requests.get("https://www.udemy.com/course/codegym-python/") soup = BeautifulSoup(response.text, "html.parser") price = soup.find("span", {"class": "price-text__current"}).getText()[7:] #取得文字中的價格部分
其中所使用的BeautifulSoup爬蟲觀念,可以參考[Python爬蟲教學]7個Python使用BeautifulSoup開發網頁爬蟲的實用技巧文章。當價格小於500元時,就透過LINE Notify傳送降價的訊息,如下範例:
from bs4 import BeautifulSoup import requests response = requests.get("https://www.udemy.com/course/codegym-python/") soup = BeautifulSoup(response.text, "html.parser") price = soup.find("span", {"class": "price-text__current"}).getText()[7:] #取得文字中的價格部分 if int(price) < 500: #將爬取的價格字串轉型為整數 headers = { "Authorization": "Bearer " + "你的權杖(token)", "Content-Type": "application/x-www-form-urlencoded" } params = {"message": "Python基礎課程和網路爬蟲入門實戰 已降價至" + price + "元"} r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params) print(r.status_code) #200
執行結果
從範例中可以看到,要利用LINE Notify傳送訊息時,需在headers中加上剛剛所取得的權杖(token),接著自訂所要傳送的訊息,如第16行,最後,呼叫LINE Notify的API,如果沒有發生問題,則會得到200的狀態碼(status_code)。
四、小結
以上就是利用簡單的實務範例來瞭解Python網頁爬蟲如何和LINE Notify整合,來推播或傳送所爬取的資訊,是不是非常的方便阿。現在就來找一個關注的目標,練習用Python網頁爬蟲取得資訊的同時,結合LINE Notify來幫你傳送訊息吧。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
Python學習資源
Python網頁爬蟲推薦課程
Python LINE Bot推薦書籍
Python網頁爬蟲-BeautifulSoup教學
Python網頁爬蟲-Selenium教學
Python非同步網頁爬蟲
Python網頁爬蟲應用
Python網頁爬蟲部署
Python網頁爬蟲資料儲存
Python網頁爬蟲技巧
想請問「管理登錄服務」的用途是什麼呢?
回覆刪除我試過不建立一個新服務,只在個人「個人頁面」,發行權杖,
一樣可以將訊息推送出去。
謝謝~
您好,「管理登錄服務」頁面主要是用來建立與管理多個服務,當然,如果您只有一個服務的話,不管在「管理登錄服務」和「個人頁面」發行權杖,其實沒有差別,但是當您有多個不同服務需要同時連動的時候,就需要透過「管理登錄服務」頁面來建立與管理。希望有回答到您的問題 :)
刪除不好意思,我有依照您的方式去做,最後沒有成功,想問你是否有email 可以詢問你無法成功嗎?
回覆刪除您好,可以將問題或程式碼截圖,到Learn Code With Mike粉絲專頁私訊我,將會協助您解決問題,謝謝 :)
刪除網誌管理員已經移除這則留言。
回覆刪除您好,請別在留言處打廣告唷,謝謝 :)
刪除你好,請問我沒有基礎,目前有在投資股票
回覆刪除我該怎麼利用網頁爬蟲及line notify,去抓取經濟日報及公開資訊觀測站
即時公布的新聞或公告,即時推撥到LINE?
只抓有關鍵字的新聞
刪除不是教你了嗎? 照著上面的方式實作啊
刪除您好 請問在此情況下若不想要持續電腦維持開機
回覆刪除以雲端平台持續line notify的運作有無相關資料可供學習 謝謝
請問報錯如下,該如何解決呢?
回覆刪除Traceback (most recent call last):
File "line.py", line 7, in
price = soup.find("span", {"class": "price-text__current"}).getText()[7:] # 取得文字中的價格部
AttributeError: 'NoneType' object has no attribute 'getText'
顯示400是為什麼呢
回覆刪除