Skip to main content

V2PH downloader

Project description

V2PH Downloader

微圖坊下載器

特色

📦 開箱即用:不用下載額外依賴
🌐 跨平台:全平台支援
🔄 雙引擎:支援 DrissionPage 和 Selenium 兩種自動化選項
🛠️ 方便:支援多帳號自動登入自動切換
🔑 安全:使用和 Psono 一樣的後端 PyNaCL

安裝

基本需求為

  1. 電腦已安裝 Chrome 瀏覽器
  2. Python 版本 > 3.10
  3. 使用指令安裝套件
pip install v2dl

使用方式

首次執行時需要登入 V2PH 的帳號,有兩種方式

帳號管理介面

使用 v2dl -a 進入帳號管理介面。

v2dl -a   # 設定帳號

手動登入

帳號登入頁面的機器人偵測比較嚴格,可以隨機下載一個相簿,遇到登入頁面後手動登入。

嘗試第一次下載

v2dl 支援多種下載方式,可以下載單一相簿,也可以下載相簿列表,也支援從相簿中間開始下載,以及讀取文字文件中的所有頁面。

# 下載單一相簿
v2dl "https://www.v2ph.com/album/Weekly-Young-Jump-2015-No15"

# 下載相簿列表的所有相簿
v2dl "https://www.v2ph.com/category/nogizaka46"

# 下載文字檔中的所有頁面
v2dl -i "/path/to/urls.txt"

設定

會尋找系統設定目錄中是否存在 config.yaml 以及 .env 設定檔,兩者格式請參照根目錄的範例。

裡面可以修改捲動長度、捲動步長與速率限制等設定:

  • download_dir: 設定下載位置,預設系統下載資料夾。
  • download_log: 紀錄已下載的 album 頁面網址,重複的會跳過,該文件預設位於系統設定目錄。
  • system_log: 設定程式執行日誌的位置,該文件預設位於系統設定目錄。
  • rate_limit: 下載速度限制,預設 400 夠用也不會被封鎖。
  • chrome/exec_path: 系統的 Chrome 程式位置。

系統設定目錄位置:

  • Windows: C:\Users\xxx\AppData\v2dl
  • Linux, macOS: /Users/xxx/.config/v2dl

參數

  • url: 下載目標的網址。
  • -i: 下載目標的 URL 列表文字文件,每行一個 URL。
  • -a: 進入帳號管理工具。
  • --bot: 選擇自動化工具,drission 比較不會被機器人檢測封鎖。
  • --dry-run: 僅進行模擬下載,不會實際下載檔案。
  • --chrome-args: 複寫啟動 Chrome 的參數,用於被機器人偵測封鎖時。
  • --user-agent: 複寫 user-agent,用於被機器人偵測封鎖時。
  • --terminate: 程式結束後是否關閉 Chrome 視窗。
  • -q: 安靜模式。
  • -v: 偵錯模式。

安全性簡介

作為好玩的套件,所以會放一些看起來沒用的功能,例如這個安全架構,其實我也只是把文檔看過一遍就拿來用,這個段落都是邊寫邊查(不過有特別選輕量套件,這個才 4MB,常見的 cryptography 25MB)。

密碼儲存使用基於現代密碼學 Networking and Cryptography (NaCl) 的加密套件 PyNaCL,系統採用三層金鑰架構完成縱深防禦:

  • 第一層使用作業系統的安全亂數源 os.urandom 生成 32 位元的 encryption_key 和 salt 用以衍生金鑰,衍生金鑰函式 (KDF) 採用最先進的 argon2id 演算法,此演算法結合最先進的 Argon2i 和 Argon2d,能有效防禦 side-channel resistant 和對抗 GPU 暴力破解。

  • 中間層使用主金鑰保護非對稱金鑰對,使用 XSalsa20-Poly1305 演算法加上 24-byte nonce 防禦密碼碰撞,XSalsa20 擴展了 Salsa20,在原本高效、不需要硬體加速的優勢上更進一步強化安全性。Poly1305 確保密碼完整性,防止傳輸過程中被篡改的問題。

  • 最外層以 SealBox 實現加密,採用業界標準 Curve25519 演算法提供完美前向保密,Curve25519 只需更短的金鑰就可達到和 RSA 同等的安全強度。

最後將金鑰儲存在設有安全權限管理的資料夾,並將加密材料分開儲存於獨立的 .env 環境中。

在腳本中使用

import v2dl
import logging

your_custom_config = {
    "download": {
        "min_scroll_length": 500,
        "max_scroll_length": 1000,
        "min_scroll_step": 150,
        "max_scroll_step": 250,
        "rate_limit": 400,
        "download_dir": "v2dl",
    },
    "paths": {
        "download_log": "downloaded_albums.txt",
        "system_log": "v2dl.log",
    },
    "chrome": {
        "profile_path": "v2dl_chrome_profile",
        "exec_path": {
            "Linux": "/usr/bin/google-chrome",
            "Darwin": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
            "Windows": r"C:\Program Files\Google\Chrome\Application\chrome.exe",
        },
    },
}

# Initialize
log_level = logging.INFO
logger = logging.getLogger(__name__)
config_manager = v2dl.ConfigManager(your_custom_config)
app_config = config_manager.load()
download_service = v2dl.ThreadingService(logger)

runtime_config = RuntimeConfig(
    url=args.url,
    input_file=args.input_file,
    bot_type=args.bot_type,
    chrome_args=args.chrome_args,
    user_agent=args.user_agent,
    use_chrome_default_profile=args.use_default_chrome_profile,
    terminate=args.terminate,
    download_service=download_service,
    dry_run=args.dry_run,
    logger=logger,
    log_level=log_level,
    no_skip=args.no_skip,
)

# (Optional) setup logging format
v2dl.setup_logging(runtime_config.log_level, log_path=app_config.paths.system_log)

# Instantiate and start scraping
web_bot = v2dl.get_bot(runtime_config, app_config)
scraper = v2dl.ScrapeManager(runtime_config, app_config, web_bot)
scraper.start_scraping()

補充

  1. 換頁或者下載速度太快都可能觸發封鎖,目前的設定已經均衡下載速度和避免封鎖了。
  2. 會不會被封鎖也有一部分取決於網路環境,不要開 VPN 下載比較安全。
  3. 謹慎使用,不要又把網站搞到關掉了,難得有資源收錄完整的。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

v2dl-0.1.0.tar.gz (43.8 kB view details)

Uploaded Source

Built Distribution

v2dl-0.1.0-py3-none-any.whl (47.6 kB view details)

Uploaded Python 3

File details

Details for the file v2dl-0.1.0.tar.gz.

File metadata

  • Download URL: v2dl-0.1.0.tar.gz
  • Upload date:
  • Size: 43.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for v2dl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 afeda8a14f206761106d3d64b6799b239956abf742b09aff1132a9d3aa838af8
MD5 5f39bdf3f2b6de635c4ff2f1ec163174
BLAKE2b-256 9bf3761aa1e20c2be6a2a915c51e66238817b1091c5323c7234db80370570069

See more details on using hashes here.

Provenance

The following attestation bundles were made for v2dl-0.1.0.tar.gz:

Publisher: python-publish.yml on ZhenShuo2021/V2PH-Downloader

Attestations:

File details

Details for the file v2dl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: v2dl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 47.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for v2dl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f6b91daf5b78ba026d02002395f6538b5b9228bf8c29e5b770ab1302e77ac9fa
MD5 7e66b8eaa9eca3506da80bd204efb481
BLAKE2b-256 b56ed6e243c82808a6a59d3bb950ad3511a9d410def1fa656b25b2f12e3106a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for v2dl-0.1.0-py3-none-any.whl:

Publisher: python-publish.yml on ZhenShuo2021/V2PH-Downloader

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page