---
# System prepended metadata

title: 股市爬蟲

---

# 股市爬蟲
## 實施架構
![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)

