跳到主要內容區塊

ntuccepaper2019

專題報導

Python網頁爬蟲連動Line Notify
  • 卷期:v0062
  • 出版日期:2022-09-20

作者:黃鴻鈞 / 臺灣大學計算機及資訊網路中心程式設計組行政專員


網頁爬蟲(web crawler),是指使用程式自動撈取網頁上的資料,Python可以簡單的撰寫程式來實現這個目的。爬蟲得到的資料經過處理後,可以再利用一些方法,例如:網頁上是否出現了特定內容、網頁資訊是否更新等等,此時再透過LINE Notify發出通知訊息,隨時掌握到網頁最新動態。

 

Line Notify介紹

Line Notify是通訊軟體LINE裡的一個功能,使用者可自行呼叫API來傳送訊息。與網站服務連動完成後,LINE所提供的官方帳號「LINE Notify」將會傳送通知。不僅可與多個服務連動,也可透過LINE群組接收通知。

1. 註冊LINE Notify服務

        進到LINE Notify的官方服務網站(https://notify-bot.line.me/zh_TW/),

點選右上角的登入,帳號註冊方式在這就不贅述,請自行準備好LINE帳號做登入。

 

20220920_006204_01

 

登入後,點擊右上角使用者名稱,再點選「管理登錄服務」

 

 

20220920_006204_02

 

 

來到此頁面後,點選「登錄服務」

 

 

20220920_006204_03

 

填寫LINE Notify服務的各項資料,填寫內容僅供參考,可自行設計,僅「服務網址」Callback URL兩項需填上http://127.0.0.1,這是因為等等我們的Python會在本機上執行,資料填完再點擊「同意並前往下一步」。

備註:Email要填寫能夠正常收信的,沒收到認證信不能啟用服務。

 

 

20220920_006204_04

 

 

檢查填寫的資料無誤後點選「登錄」

 

20220920_006204_05

 

 

查看剛剛填寫的Email信箱,找到一封LINE Notify註冊用網址通知」,點選信件內文中LINE Notify註冊用網址】下面的連結進行啟用,完成後回到剛剛的頁面點擊「前往服務一覽」。

 

 

20220920_006204_06

 

現在我們可以看到新增了一個服務,再來點擊右上角使用者名稱,選擇「個人頁面」

 

 

20220920_006204_07

 

切換頁面後,點選下方的「發行權杖」

 

20220920_006204_08

 

填寫權杖名稱,這次用的是From Python,之後發訊息時會在訊息最前面自動加上【From Python】,可自行設計想要的權杖名稱。在要接收通知的聊天室點擊「透過11聊天接收LINE Notify的通知」,再來點擊最下方的「發行」

 

20220920_006204_09

 

這時會跳出權杖(token),把這一整串密碼複製保存起來,這邊沒存到就要從頭再來一遍了,建議不要按關閉,直到等等Python確定可執行再關閉。至此註冊LINE Notify服務大功告成,接下來要寫Python了。

 

20220920_006204_10

 

2. 撰寫Python程式碼

Python的安裝這邊就不贅述,下面用Visual Studio Code來撰寫Python的程式碼,請先安裝兩個套件:requests、BeautifulSoup,requests是要拿來做網頁的request,BeautifulSoup則是網頁爬蟲的套件。

 

20220920_006204_11

 

url是放要爬蟲的網頁,這裡用PTT的Movie板當示範(https://www.ptt.cc/bbs/movie/index.html),先用reuests.get()取得資料後,再用BeautifulSoup()來轉成我們看得懂的HTML,下一步需要一些HTML及CSS的基礎知識,select()擷取我們要的HTML元素內容,這邊要擷取的是<div class=title>下的<a>,最後再用回圈把撈到的文字填進msg傳回。

 

再來我們要用LINE Notify的API來傳送訊息,這部份需要依照API的參數填資料,程式碼比較固定,重點在於最後用requests.post()把參數傳給API(https://notify-api.line.me/api/notify)。

 

20220920_006204_12

 

在主程式把註冊得到的token填上,還有想要爬蟲的網址填上,再依序呼叫上面兩個函式。

 

20220920_006204_13

執行後可以正常收到LINE Notify就代表成功了

 

20220920_006204_14

 

下面附上程式碼的文字版:

 

import requests

from bs4 import BeautifulSoup

 

def PTTcrawler(url):

    response = requests.get(url)

    soup = BeautifulSoup(response.text, "html.parser")

    posts = soup.select("div.title a")

    msg = ""

    for item in posts:

        msg += item.text + "\n"

    return msg

 

def LineNotify(token, msg):

    headers = {

        "Authorization": "Bearer " + token,

        "Content-Type": "application/x-www-form-urlencoded"

    }

    params = {

        "message": msg

    }

    r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)

 

if __name__ == "__main__":

    token = "你的token" #從LINE Notify取得的權杖(token)

    url = "https://www.ptt.cc/bbs/movie/index.html" #要爬蟲的網址

    msg = "最新文章列表:\n" + PTTcrawler(url) #要在LINE上跳出的提示訊息

    LineNotify(token, msg)

 

結語

Python網頁爬蟲的知識跟技巧很龐大,這次僅僅只是做個開頭介紹,重點在於示範如何將Python網頁爬蟲跟LINE Notify做一個連接。程式可以在改寫後做出更多不一樣的功能,像是商品搶購機器人、追蹤股價趨勢、實價登錄房價分析等等,這些都是程式設計師可以再去發想創作。