備份 櫻坂46 官方網站 上指定成員的部落格文章,將列表頁與文章內頁(含圖片、CSS、JS 等資源)完整下載到本機,方便離線瀏覽與長期保存。
- 依成員 ID 抓取該成員的所有部落格文章,自動翻頁直到偵測「Not Found」頁面為止
- 下載文章內的圖片、CSS、JS、CSS 背景圖等資源,並修改 HTML 內的連結指向本機檔案
- 增量備份:已下載過的文章會自動略過,不會重複下載
- 若頁面中有任何資源下載失敗,該頁面會整頁放棄存檔(避免半殘檔案),下次執行時會自動重試
- 下載失敗時具備自動重試機制(連線錯誤、逾時、伺服器 5xx 錯誤重試 3 次)
- 能區分「正常翻到底」與「網路下載失敗」:翻到底才正常結束;若列表頁因網路問題失敗,會明確提示掃描中斷、可能未完成,請重新執行(不會誤判成已備份完整)
- 執行結束時列出本次結果:新增備份幾篇、以及哪些文章下載失敗(方便下次補抓)
- 執行時可選擇是否關閉 SSL 驗證,因應公司內網等有 SSL 攔截的環境
- 每頁列表會自動加上「上一頁 / 下一頁」導覽列,方便離線瀏覽時翻頁
| 檔案 | 說明 |
|---|---|
blog_copy.py |
主程式原始碼 |
sakura_blog_copy.exe |
打包好的執行檔(Windows,免安裝 Python 即可執行) |
members.json |
成員對照表,成員 ID: 成員名稱,可自行編輯新增/修改成員 |
blog-thumb-empty.ico / .png |
程式圖示 |
Sakurazaka_Backup/ |
備份輸出資料夾,每位成員一個子資料夾 |
- 確認
sakura_blog_copy.exe與members.json位於同一個資料夾 - 雙擊執行
sakura_blog_copy.exe - 依畫面提示輸入成員 ID(例如
43) - 接著會詢問是否關閉 SSL 驗證,一般情況直接按 Enter(維持驗證)即可
- 程式會自動開始下載,完成後備份檔會存放在
Sakurazaka_Backup/<成員名稱>/資料夾中
需先安裝 Python 3 與相依套件:
pip install requests beautifulsoup4執行程式:
python blog_copy.py程式啟動時會詢問是否關閉 SSL 驗證,預設維持開啟(直接按 Enter 或輸入 n)。
如果你在公司內網等環境下執行時遇到類似下列錯誤,通常是因為網路端做了 SSL 攔截,此時可在提示出現時輸入 y 關閉驗證來繞過:
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed:
unable to get local issuer certificate
關閉 SSL 驗證會降低連線安全性,若非遇到上述問題,建議維持開啟。更正規的做法是向公司 IT 取得攔截用的 CA 憑證檔並指定給程式使用。
常用的參數都集中在 blog_copy.py 最上方的「可調整設定區」,要修改時改那裡即可,不需要翻找程式內部。主要包含:
| 設定 | 說明 |
|---|---|
BACKUP_ROOT |
備份輸出的主資料夾名稱(預設 Sakurazaka_Backup) |
MEMBERS_FILENAME |
成員對照表檔名(預設 members.json) |
BASE_LIST_URL |
部落格列表頁網址 |
REQUEST_TIMEOUT |
連線逾時秒數(怕網路 lag 可調大,預設 30) |
PAGE_DELAY |
每掃描完一頁後的等待秒數(放慢速度、對伺服器友善) |
MAX_RETRIES / RETRY_BACKOFF |
失敗重試次數與間隔 |
SELECTOR_* / NOTFOUND_* |
頁面結構相關的 CSS selector 與判讀文字 |
若官網改版導致抓不到文章或無法正常判斷結尾,多半是頁面結構變了,對照新版頁面調整設定區裡的
SELECTOR_*即可,通常不需要改動主程式邏輯。
成員 ID 與名稱記錄在 members.json,格式為:
{
"43": "Inoue_Rina_(井上梨名)",
"45": "Takemoto_Yui_(武元唯衣)",
"46": "Tamura_Hono_(田村保乃)",
"47": "Fujiyoshi_Karin_(藤吉夏鈴)",
"48": "Matsuda_Rina_(松田里奈)",
"50": "Morita_Hikaru_(森田ひかる)"
...
}若成員名單有異動(例如新成員加入、成員畢業),直接編輯此檔案即可,不需要修改程式碼或重新打包 exe。若讀取不到任何成員資料(檔案不存在或格式錯誤),程式會直接結束。
成員 ID 可從官網該成員頁面的網址結尾取得,例如 https://sakurazaka46.com/s/s46/artist/46 的 ID 就是 46。
編輯 JSON 時常見的錯誤:
- 最後一筆後面不能有逗號(中間每一筆都要有,只有最後一筆沒有)
- key 與 value 都要用雙引號
",不能用單引號- 檔案要直接以
{開頭,不能寫成MEMBERS = { ... }JSON 標準格式不支援註解,若要標記畢業成員或加註說明,需調整檔案結構(例如改用陣列 +
graduated欄位)。
Sakurazaka_Backup/
└── <成員名稱>/
├── blog_list_0.html # 部落格列表第 1 頁
├── blog_list_1.html # 部落格列表第 2 頁
├── ...
├── details/
│ ├── blog_<文章ID>.html # 文章內頁
│ └── ...
└── sakurazaka46.com/ # 下載的圖片、CSS、JS 等資源
- 請勿短時間內大量重複執行,避免對官方伺服器造成過大負擔
- 若成員已畢業,官網上的部落格文章可能已下架,執行備份時該成員可能沒有任何文章可抓取
- 程式會偽裝瀏覽器 User-Agent 以避免部分請求被阻擋,僅供個人備份與離線保存使用