想要從事網頁資料分析的人,相信對於使用Python來開發網頁爬蟲取得所需的資料並不陌生,但是有沒有辦法能夠每天持續的自動化蒐集資料,並且儲存在資料庫中,使得有足夠的資料量可以進行分析?
答案是有的,本文將延續[Python爬蟲教學]輕鬆學會Python網頁爬蟲與MySQL資料庫的整合方式文章,將開發完成的Python網頁爬蟲部署到Heroku雲端平台,串接Heroku ClearDB MySQL雲端資料庫,存入取得的網頁資料,並且,透過Heroku Scheduler排程器自訂執行時間,來實現自動化資料蒐集,如下圖:
其中的重點包含:
- 安裝Git
- 安裝Heroku CLI
- 建立Heroku應用程式
- 建立ClearDB MySQL
- 建立ClearDB MySQL資料表
- 部署Python網頁爬蟲
- 建立Heroku Scheduler
一、安裝Git
Git是一個分散式的版本控制系統(Version Control System),除了可以協助開發人員進行程式碼的版本控制外,在使用Heroku雲端平台運行應用程式時,也需使用Git來推送(push)程式碼至Heroku Git Repository,進行部署的動作。
前往Git官網的下載頁面,依照作業系統進行安裝,如下圖:
二、安裝Heroku CLI
Heroku是一個平台即服務(PaaS)的雲端平台,支援多種程式語言,開發人員能夠利用Git來部署應用程式,並且提供CLI(Command-Line Interface),可以透過指令來操作Heroku雲端平台的服務,提升部署的效率。
前往Heroku Dev Center,在開始安裝前,需先進行註冊的動作,依照指示即可完成,如下圖:
註冊並且登入成功後,在首頁左下角的地方可以看到「The Heroku CLI」,如下圖:
點擊後,往下就可以看到安裝的畫面,如下圖:
依據作業系統進行安裝即可。由於本文部署Python網頁爬蟲至Heroku雲端平台時,會使用到ClearDB MySQL及Heroku Scheduler(排程器)兩個附加的服務,所以,會需要先填寫信用卡的資訊,不過不用擔心,在尚未超過免費使用的額度前,不會收取任何費用。
點擊使用者的頭像,選擇「Account settings」,如下圖:
三、建立Heroku應用程式
完成後,現在就要在Heroku雲端平台上,建立一個應用程式,來存放我們的Python網頁爬蟲。本文以Visual Studio Code為例,開啟[Python爬蟲教學]輕鬆學會Python網頁爬蟲與MySQL資料庫的整合方式文章所建置的專案,在Terminal視窗利用以下的Heroku CLI指令進行登入:
$ heroku login
接著,建立Heroku雲端平台應用程式,如下:
$ heroku create stockmarketscraper
執行結果
四、建立ClearDB MySQL
有了Heroku應用程式後,接下來就要建立資料庫,來存放Python網頁爬蟲應用程式所取得的資料。而ClearDB MySQL就是Heroku雲端平台所提供的MySQL資料庫服務。
在[Python爬蟲教學]輕鬆學會Python網頁爬蟲與MySQL資料庫的整合方式文章所建立的Python網頁爬蟲,取得的股票當日行情資料,都是儲存到本地端的MySQL資料庫中。而部署到Heroku雲端平台後,就需要把原來資料庫連接的地方,修改為連接ClearDB MySQL,讓運行在Heroku雲端平台上的Python網頁爬蟲,能夠將取得的資料存入雲端資料庫中。
首先,利用以下的Heroku CLI指令建立ClearDB MySQL:
$ heroku addons:create cleardb:ignite
執行結果
以上指令中的「ignite」為ClearDB MySQL服務的免費方案,建立成功後,就會產生上圖紅框處的ClearDB MySQL名稱,限制的使用量如下圖:
接著,透過以下的指令,取得ClearDB MySQL的連線資訊,如下:
$ heroku config
執行結果就會有一個CLEARDB_DATABASE_URL的欄位,包含了連接ClearDB MySQL所需的資訊,它的結構說明如下:
mysql://username:password@hostname/database_name?reconnect=true
有了連線資訊後,就可以開啟本地端的MySQL Workbench工具進行連接。在首頁,點擊本地端連線上方的加號,來新增新的連線,如下圖:
接著,依據剛剛取得的CLEARDB_DATABASE_URL,擷取相應欄位的值,填入即可,如下圖:
這時候,回到MySQL Workbench工具的首頁,可以看到多了一個資料庫的連線,如下圖:
五、建立ClearDB MySQL資料表
接下來,就要比照本地端的股市資料表(market),來建立ClearDB MySQL的資料表(Table)。為了提升建立的效率,可以先點擊MySQL Workbench工具首頁的左邊本地端連線,登入後,複製股市資料表(market)的建立指令(SQL),如下圖:
在空白的Query1中,貼上剛剛所複製的資料表建立指令,並且加上Heroku雲端平台的資料庫名稱,如下圖:
六、部署Python網頁爬蟲
Heroku雲端平台的ClearDB MySQL建置完成後,開啟Python網頁爬蟲專案中的scraper.py檔案,將原來連接本地端MySQL資料庫的地方,修改為連接ClearDB MySQL,如下範例:
db_settings = {
"host": "*****",
"port": 3306,
"user": "*****",
"password": "*****",
"db": "*****",
"charset": "utf8"
}
並且,在原來建立股票物件的地方,增加以下範例的判斷,告訴Heroku雲端平台單獨執行scraper.py檔案:
if __name__ == "__main__": stock = Stock('2451', '2454') # 建立Stock物件 stock.save(stock.scrape()) # 將爬取的結果存入MySQL資料庫中
接著,為了要讓Heroku雲端平台知道,執行這個Python網頁爬蟲所需的套件,就要利用以下的指令來進行蒐集:
$ pip freeze > requirements.txt
最後,就可以進行部署的動作,首先,利用以下的指令建立本地端的Git Repository,如下範例:
$ git init
如果Python網頁爬蟲在開發的過程中已經有使用Git進行版本控制的話,這個步驟可以省略。
本地端的Git Repository建立完成後,利用以下四個指令,將Python網頁爬蟲的程式碼推送(Push)到Heroku雲端平台:
$ git add . #將所有變更的程式碼檔案加入到本地端Git Repository
$ git commit -m "your_message" #儲存到硬碟中
$ heroku git:remote -a stockmarketscraper #將Heroku雲端平台的Git Repository切換到stockmarketscraper的應用程式
$ git push heroku master #推送到Heroku雲端平台stockmarketscraper應用程式的Git Repository
先將Python網頁爬蟲的程式碼加入到本地端的Git Repository,接著Commit儲存到硬碟中,其中可以自訂這個版本的說明文字(your_message),最後,將Heroku雲端平台上的Git Repository切換到stockmarketscraper應用程式,把儲存在硬碟中的程式碼推送(Push)上去。
七、建立Heroku Scheduler
Python網頁爬蟲部署到Heroku雲端平台後,接著,就要建立一個排程器,定時執行Python網頁爬蟲。
前往Heroku官方網站,登入後,前往stockmarketscraper應用程式,在「Resource」頁籤中,輸入schedule關鍵字,並且選擇「Heroku Scheduler」,如下圖:
這邊要特別注意的是,時間的單位是UTC(世界協調時間),與台灣有8小時的時差,就算將Heroku雲端平台的時區設定為台北,也是一樣,所以在時間的計算上,需要特別考量。
Heroku Scheduler排程器新增成功後,可以看到執行的歷程,如下圖:
本文Python網頁爬蟲部署到Heroku雲端平台後,即可每天自動化爬取所需的資料,存入ClearDB MySQL雲端資料庫中,並且可以輕鬆的使用本地端MySQL Workbench工具進行管理。希望對於想要將Python網頁爬蟲部署到雲端平台的讀者有所幫助,達到自動化蒐集資料的目的。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
Python學習資源
Python網頁爬蟲推薦課程
Python網頁爬蟲-BeautifulSoup教學
Python網頁爬蟲-Selenium教學
Python非同步網頁爬蟲
Python網頁爬蟲應用
Python網頁爬蟲資料儲存
Python網頁爬蟲技巧
你好請問建這個每10分鐘運行一次的程序大概一個月會用到多少heroku的時數?
回覆刪除