Skip to content

Repository files navigation

櫻坂46 部落格備份工具

備份 櫻坂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/ 備份輸出資料夾,每位成員一個子資料夾

使用方式

方法一:直接執行 exe

  1. 確認 sakura_blog_copy.exemembers.json 位於同一個資料夾
  2. 雙擊執行 sakura_blog_copy.exe
  3. 依畫面提示輸入成員 ID(例如 43
  4. 接著會詢問是否關閉 SSL 驗證,一般情況直接按 Enter(維持驗證)即可
  5. 程式會自動開始下載,完成後備份檔會存放在 Sakurazaka_Backup/<成員名稱>/ 資料夾中

方法二:以原始碼執行

需先安裝 Python 3 與相依套件:

pip install requests beautifulsoup4

執行程式:

python blog_copy.py

關於 SSL 驗證選項

程式啟動時會詢問是否關閉 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 以避免部分請求被阻擋,僅供個人備份與離線保存使用

About

備份櫻坂46官方網站上指定成員的部落格文章,將列表頁與文章內頁(含圖片、CSS、JS 等資源)完整下載到本機,方便離線瀏覽與長期保存。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages