概述

网页镜像功能可以将在线网页完整保存到本地,包括 HTML、CSS、JavaScript、图片、字体等所有资源,并自动重写资源链接为相对路径,确保离线可访问。

特性
  • 浏览器渲染:使用浏览器获取 JavaScript 动态生成的内容
  • 并发下载:多线程下载资源,速度更快
  • 隐身模式:自动使用完整浏览器请求头,避免被 CDN 拦截
  • 自动预览:下载完成后自动在浏览器中预览

cfspider.mirror()

将网页完整保存到本地。

函数签名

python
cfspider.mirror(
    url: str,
    save_dir: str = "./mirror",
    open_browser: bool = True,
    cf_proxies: str = None,
    vless_uuid: str = None,
    **kwargs
) -> MirrorResult

参数说明

参数 类型 默认值 说明
url str 必填 要镜像的网页 URL
save_dir str "./mirror" 保存目录路径
open_browser bool True 是否在下载完成后自动打开浏览器预览
cf_proxies str None

代理地址,支持以下格式:

  • VLESS 链接:"vless://uuid@host:443?path=/"
  • 本地代理:"127.0.0.1:9674"
  • edgetunnel 域名:"v2.example.com"(需要配合 vless_uuid)
vless_uuid str None VLESS UUID(仅在使用 edgetunnel 域名时需要)
**kwargs dict - 传递给 Browser 的其他参数

返回值

MirrorResult

镜像结果对象,包含以下属性:

  • index_file (str):主 HTML 文件的完整路径
  • assets_dir (str):资源目录的完整路径
  • total_files (int):下载的文件总数(包含 index.html)
  • total_size (int):所有文件的总大小(字节)
  • failed_urls (List[str]):下载失败的 URL 列表
  • success (bool):镜像是否成功

使用示例

基本用法

python
import cfspider

# 基本用法
result = cfspider.mirror("https://example.com")
print(result.index_file)  # ./mirror/index.html
print(f"文件数: {result.total_files}")
print(f"大小: {result.total_size / 1024:.2f} KB")

指定保存目录

python
result = cfspider.mirror(
    "https://example.com",
    save_dir="./my_backup",
    open_browser=False
)

使用 VLESS 代理

python
result = cfspider.mirror(
    "https://example.com",
    cf_proxies="vless://uuid@host:443?path=/"
)

目录结构

镜像后的目录结构如下:

text
save_dir/
├── index.html              # 主页面
└── assets/
    ├── css/                # CSS 文件
    ├── js/                 # JavaScript 文件
    ├── images/             # 图片文件
    ├── fonts/              # 字体文件
    └── other/              # 其他资源

WebMirror 类

高级用法,可以更精细地控制镜像过程。

使用示例

python
import cfspider

mirror = cfspider.WebMirror(
    url="https://example.com",
    save_dir="./backup"
)

# 开始镜像
result = mirror.mirror()

# 检查结果
if result.success:
    print(f"成功保存到: {result.index_file}")
else:
    print(f"失败: {result.failed_urls}")