# 股市爬蟲 ## 實施架構 ![image](https://hackmd.io/_uploads/Hy3RakAQJg.png) 檔案下載 ## 步驟1:建立S3 Bucket ### 用途:存放股票資料 1. 進入aws consoel 2. 進入s3點選 [Create bucket] ![image](https://hackmd.io/_uploads/Sk6XyeC7Jx.png) 3. 為自己的buket取名字 ![image](https://hackmd.io/_uploads/SyTF1gAXkg.png) 4. 取消勾選「Block all publick access」,並勾選下面的警告,表示您了解取消勾選後會使bucket跟object公開 ![image](https://hackmd.io/_uploads/SkJYee07kx.png) 5. 點擊create buket ![image](https://hackmd.io/_uploads/SyPfflA71e.png) ## 步驟2:建立第一個Lambda ### 用途:抓證交所網頁資料並存入S3 1. 進入Lambda,點選[Create Lambda] ![image](https://hackmd.io/_uploads/Hy05XeRmye.png) 2. 輸入Function name(名稱自訂) ![image](https://hackmd.io/_uploads/BkLVVx0Xyx.png) 3. Runtime選擇Python3.13 ![image](https://hackmd.io/_uploads/rJc7SlAQ1g.png) 4. 展開下方的Change default execution role 選擇[Use an existing role] 下面選擇LabRole 最後點選[Create function] ![image](https://hackmd.io/_uploads/Hy7gLlRQkx.png) 5. 點選[Upload from] ![image](https://hackmd.io/_uploads/rkvIPeA7yx.png) 6. 選擇上傳[.zip file] ![image](https://hackmd.io/_uploads/Sy_OPlRQyx.png) 7. 點選[Upload],選擇lambda_1.zip的檔案 ![image](https://hackmd.io/_uploads/ryF1teCQJx.png) 8. 確認選擇的檔案是否正確,點擊[Save] ![image](https://hackmd.io/_uploads/HycvYg0Xke.png) 9. 點選[Configuration] ![image](https://hackmd.io/_uploads/B1rAFxR7kg.png) 10. 點選[Edit] ![image](https://hackmd.io/_uploads/HkLb5e0m1l.png) 11. 更改Timeout為1分鐘後,下面點選[save] ![image](https://hackmd.io/_uploads/B1C89l0Q1l.png) 12. 點選[Code] ![image](https://hackmd.io/_uploads/Skr09eAm1g.png) 13. 程式碼第19行更改成自己的S3 Bucketname(可以到s3去複製) ![image](https://hackmd.io/_uploads/BJfaslCXyx.png) 14. 點選左邊的[Deploy] ![image](https://hackmd.io/_uploads/rJz93x0mkx.png) 15. 點選[Test],[creare new test event] ![image](https://hackmd.io/_uploads/H1ZFTeA7yl.png) ![image](https://hackmd.io/_uploads/H1hialA71g.png) 16. 對測試事件取名字後,[save] ![截圖 2024-12-05 凌晨12.05.36](https://hackmd.io/_uploads/rJd4CgAQ1x.png) 17. 再次點選[Test] ![image](https://hackmd.io/_uploads/H1ZFTeA7yl.png) 18. 選擇剛剛建的測試事件 ![截圖 2024-12-05 凌晨12.11.29](https://hackmd.io/_uploads/rJKFkb0Xyl.png) 19. 跑完測試後,output的結果 ![image](https://hackmd.io/_uploads/Hkw1x-Cmyl.png) 20. 進入s3檢查是否有爬下來的資料 ![image](https://hackmd.io/_uploads/B1pze-RQke.png) ## 步驟3:建立DynamoDB ### 用途 1. 進入DynamoDB,點選[Create table] ![image](https://hackmd.io/_uploads/B1NZbZA7kg.png) 2. 取一個Table,Partition key寫id,點選[Create table] ![image](https://hackmd.io/_uploads/rkFxG-C7Jl.png) ![image](https://hackmd.io/_uploads/S1WKMbRm1l.png) ## 步驟4:建立第二個Lambda 1. 進入Lambda,點選[Create Lambda] ![image](https://hackmd.io/_uploads/Hy05XeRmye.png) 2. 輸入Function name(名稱自訂) ![image](https://hackmd.io/_uploads/BkLVVx0Xyx.png) 3. Runtime選擇Python3.13 ![image](https://hackmd.io/_uploads/rJc7SlAQ1g.png) 4. 展開下方的Change default execution role 選擇[Use an existing role] 下面選擇LabRole 最後點選[Create function] ![image](https://hackmd.io/_uploads/Hy7gLlRQkx.png) 5. 點選[Add trigger] ![image](https://hackmd.io/_uploads/rk-vQZ0Xkg.png) 6. 選擇s3 ![image](https://hackmd.io/_uploads/S1Uj7-CX1g.png) 7. 選擇步驟1建立的Bucket ![image](https://hackmd.io/_uploads/BkDZEZ0XJl.png) 8. 最下面的勾選起來(確保 Lambda 函數的輸入和輸出使用不同的 S3 存儲桶,避免因寫入相同存儲桶而觸發遞迴調用,進而增加使用量與成本。) 最後點選[add] ![image](https://hackmd.io/_uploads/S1ct4b0QJx.png) 9. Lambda左邊有s3表示有成功新增trigger ![image](https://hackmd.io/_uploads/S1EIHbR7yl.png) 10. 點選[Upload from] ![image](https://hackmd.io/_uploads/rkvIPeA7yx.png) 11. 選擇上傳[.zip file] ![image](https://hackmd.io/_uploads/Sy_OPlRQyx.png) 12. 點選[Upload],選擇lambda_2.zip的檔案 ![image](https://hackmd.io/_uploads/ryF1teCQJx.png) 13. 確認選擇的檔案是否正確,點擊[Save] ![image](https://hackmd.io/_uploads/ByUMLZC7Jl.png) 14. 更改程式碼第12行更換成DynamoDB table name ![image](https://hackmd.io/_uploads/ByvdUbR7Je.png) 15. 點選左邊的[Deploy] ![image](https://hackmd.io/_uploads/rJz93x0mkx.png) 16. 點選[Test],[creare new test event] ![image](https://hackmd.io/_uploads/H1ZFTeA7yl.png) ![image](https://hackmd.io/_uploads/H1hialA71g.png) 17. 對測試事件取名字 ![截圖 2024-12-05 凌晨12.05.36](https://hackmd.io/_uploads/rJd4CgAQ1x.png) 18. 複製lambda_test.json內的測試資料 19. 第23行換成s3 bucket name,第30行換成object key ![image](https://hackmd.io/_uploads/r1vD_ZCXye.png) 20. object key是s3 bucket內的object name。 進入bucket,複製其中一個object name,或是點進去object內也有可以點選複製的 ![image](https://hackmd.io/_uploads/SkRqKWAXyx.png) ![image](https://hackmd.io/_uploads/B1j15-AXJx.png) 21. 確認兩個地方更改完成後,點選[save] ![image](https://hackmd.io/_uploads/HkVfs-RQkl.png) 22. 再次點選[Test] ![image](https://hackmd.io/_uploads/H1ZFTeA7yl.png) 23. 選擇剛剛建的測試事件 ![截圖 2024-12-05 凌晨12.11.29](https://hackmd.io/_uploads/rJKFkb0Xyl.png) 24. 跑完測試後,output的結果 ![image](https://hackmd.io/_uploads/S1nDTWA71x.png) 25. 進入DynamoDB查看是否有資料,點選Explore items ![image](https://hackmd.io/_uploads/r1_JRW0myx.png) 26. 選擇你在步驟2建立的table ![image](https://hackmd.io/_uploads/rJVVCbRQyg.png) 27. 有出現資料表示有成功將網站抓取的股票資料存入資料庫 ![image](https://hackmd.io/_uploads/SyyryfAQkl.png) ## 步驟5:正式進行爬蟲、解析資料並存到DynamoDB 1. 將剛剛因測試而建立的資料。全選後,點擊[Actions],選擇Delete items ![image](https://hackmd.io/_uploads/Skze270m1e.png) 2. 再來要設定串流。選擇Tables,並點進你創建的table ![截圖 2024-12-05 凌晨1.21.11](https://hackmd.io/_uploads/Hk21ZzCQJg.png) 3. 點選Exports and streams設定串流 ![截圖 2024-12-05 凌晨1.21.31](https://hackmd.io/_uploads/SkVuWGRmkg.png) 4. 在DynamoDB stream details,點選turn on ![image](https://hackmd.io/_uploads/Skq6bzC7Jl.png) 5. 選擇New and old images後,[Turn on stream] ![image](https://hackmd.io/_uploads/SJkXzGR7kx.png) 6. 回到第一個建立的Lambda,點選[Test] ![image](https://hackmd.io/_uploads/H1ZFTeA7yl.png) 7. 爬蟲結果Succeeded後,回去DynamoDB ![image](https://hackmd.io/_uploads/Hkw1x-Cmyl.png) 8. 成功,若是沒有資料可以點一下重整 ![image](https://hackmd.io/_uploads/BkxiTXRXyx.png)