PyWebCopy新手实战:save_webpage保存单页完全教程,图片CSS与JS自动重映射
【免费下载链接】pywebcopyLocally saves webpages to your hard disk with images, css, js & links as is.项目地址: https://gitcode.com/gh_mirrors/py/pywebcopy
PyWebCopy 是一款免费的 Python 网页保存工具,可以完整或部分地将网站复制到本地硬盘,供离线浏览。它的核心函数save_webpage只需几行代码,就能把指定网页连同图片、CSS 样式表、JS 脚本一起下载到本地,并自动重映射所有资源链接为本地相对路径——保存下来的页面在断网状态下依然可以完整打开。本文是一份面向新手的完整教程,带你从零跑通第一次单页保存。
一键安装:pip 快速部署 PyWebCopy
PyWebCopy 已发布在 PyPI 上,安装只需一条命令:
pip install pywebcopy安装完成后,可以用下面两行确认版本是否就绪:
import pywebcopy print(pywebcopy.__version__)如果你希望阅读源码或从本地运行,也可以克隆仓库:
git clone https://gitcode.com/gh_mirrors/py/pywebcopysave_webpage 快速上手:3 行代码保存单页
新手最重要的第一步,就是用save_webpage保存一个单页。完整调用如下:
from pywebcopy import save_webpage save_webpage( url="https://httpbin.org/", project_folder="E://savedpages//", project_name="my_site", bypass_robots=True, open_in_browser=True, )执行完毕后,project_folder/project_name目录中就会出现整个网页的本地副本,并且默认自动在浏览器中打开(open_in_browser=True)。整个save_webpage的实现入口位于 pywebcopy/init.py,它内部依次完成三件事:
- 通过
get_config建立项目配置; - 创建
WebPage对象并get(url)抓取页面(核心类定义见 pywebcopy/core.py); - 调用
page.save_complete()下载全部资源并写盘。
核心参数详解:save_webpage 参数速查表
| 参数 | 作用 | 新手建议 |
|---|---|---|
url | 要保存的网页地址 | 必填 |
project_folder | 文件下载到的文件夹 | 不填则存入系统临时目录 |
project_name | 本次项目的名称,用于区分多次保存 | 建议填写,便于管理 |
bypass_robots | 是否绕过 robots.txt 限制 | 遇到 403 时设为True |
debug | 打印详细调试日志 | 排查问题时开启 |
open_in_browser | 保存后是否自动打开浏览器 | 默认True |
delay | 同一服务器两次请求之间的延迟(秒) | 礼貌抓取时设置 |
threaded | 是否启用多线程下载 | 新手建议关闭 |
配置对象的创建逻辑在 pywebcopy/configs.py 中,其中project_folder未提供时会回退到用户临时目录——所以第一次运行后如果找不到文件,多半是去了临时目录。
图片 CSS JS 自动重映射:离线浏览的关键原理
PyWebCopy 保存页面时,并不只是把 HTML 原样下载。它会解析 HTML 标记,发现页面上链接的所有资源:其他页面、图片、视频、样式表、脚本、文件下载——然后把它们全部下载下来。
真正的"重映射"发生在 pywebcopy/elements.py 的HTMLResource类中:解析器遍历 HTML 里的<img src>、<link href>、<script src>等标签,调度器把每个资源下载到本地后,resolve()方法会计算该文件相对父页面的本地路径,并通过replace_url把 HTML 中的原始 URL 替换为本地相对路径。
也就是说,保存后的 HTML 里不会再出现https://...的远程地址,而是指向项目文件夹内的本地文件。这正是"离线打开依然有样式、有图片"的根本原因。每个被镜像的 HTML 文件头部还会插入一条 PyWebCopy 水印注释,记录来源 URL 和抓取时间。
命令行方式:不写代码也能保存网页
如果不想打开 Python 控制台,PyWebCopy 自带易用的 CLI:
# 保存单个页面 python -m pywebcopy -p --url=https://httpbin.org/ --location=E://savedpages/ -n my_site --pop # 查看完整帮助 python -m pywebcopy --help常用选项:-p/--page保存单页、-s/--site保存整个站点、-d DELAY设置请求延迟、-q静默日志、--threaded多线程加速。
常见问题与实战建议
Q1:保存的页面打开后图片裂了?通常是 CSS 中用url(...)引用的背景资源所在域名被 robots 规则拦截,尝试加bypass_robots=True重跑,并开debug=True查看日志。
Q2:save_webpage 和 save_website 怎么选?save_webpage只保存当前页及其直接引用的资源,速度快、负载小,适合新手;save_website会爬取整个站点,可能对目标服务器造成压力,请谨慎使用(同样定义于 pywebcopy/init.py)。
Q3:需要登录才能访问的页面怎么办?PyWebCopy 底层使用requests.Session,可以通过WebPage.session属性先手动登录或设置 Cookie,再进行保存,详见 README.md 中 "Authentication and Cookies" 一节。
Q4:动态加载的页面能完整保存吗?PyWebCopy 不包含虚拟 DOM 或 JavaScript 执行引擎,只下载 HTTP 服务器直接返回的内容。由 JS 动态生成链接的页面,可能无法被完整镜像——这是所有基于静态解析的镜像工具的共同边界。
实战小贴士:
- 给
delay设一个 1~2 秒的值,避免对目标服务器造成压力; - 每个站点使用不同的
project_name,方便归档管理; - 启用
threaded=True会禁用自动打开浏览器,且可能压垮部分网站,非必要时保持关闭。
到这里,你已经掌握了 PyWebCopy 保存单页的完整流程:安装、save_webpage调用、参数调优,以及图片/CSS/JS 自动重映射背后的原理。断网打开本地副本,验证一下样式与图片是否完好,你的第一个离线网页副本就完成了。
【免费下载链接】pywebcopyLocally saves webpages to your hard disk with images, css, js & links as is.项目地址: https://gitcode.com/gh_mirrors/py/pywebcopy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考