打开浏览器按F12就能看到别人网站的下载代码,这事儿比很多人想的别人简单。但真要完整扒下来一个站,网站光靠右键“查看源代码”远远不够。代码我去年帮朋友搬一个WordPress博客,工具试了七八款工具,下载踩了不少坑。别人
先说最基础的网站。Chrome DevTools里的代码Sources面板能直接看到当前页面加载的所有HTML、CSS和JS文件。工具点开某个文件,下载右键选“Save as”就能存到本地。别人这招对付单页够用,网站缺点是代码得手动一个个点。有次我下个电商产品页,工具光图片就两百多张,挨个保存到手酸。
HTTrack算是最出名的整站下载工具,开源免费。装好后新建项目,填上网址和本地保存路径,它就会顺着链接爬。默认设置下,它会把页面里的图片、CSS、JS都拉下来,还能把绝对链接改成相对链接,方便离线浏览。
实际用起来没那么美好。现代网站大量用JavaScript动态渲染内容,HTTrack拿到的是初始HTML,那些靠AJAX加载的评论、商品列表根本抓不到。我试过下一个用React做的博客,下回来全是空白骨架。另外它默认遵守robots.txt,有些站直接拒绝爬虫,你得手动关掉这个选项——但注意,关掉不代表合法,只是技术上能跑。
Linux或macOS终端里,一行命令就能干活:
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://example.com 这行命令会递归下载整个站,把链接转成本地相对路径,连图片和CSS都带上。速度比HTTrack快,因为没图形界面开销。但wget同样搞不定JS渲染的页面。而且它默认会爬外链,不加--no-parent可能把整个互联网拖下来——别笑,真有人这么干过,磁盘爆了。
curl更适合抓单个页面。比如你想看某个API返回的JSON,或者下载一个动态生成的PDF,curl -O就能搞定。但它不解析HTML,你得自己写脚本提取链接。
如果目标站是SPA(单页应用),上面那些工具基本残废。这时候得用无头浏览器。Puppeteer(Node.js库)能启动一个看不见的Chrome,等页面完全渲染后再把HTML抓下来。写个脚本:
const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com', { waitUntil: 'networkidle0'}); const html = await page.content(); fs.writeFileSync('page.html', html); 这招能拿到最终DOM,但CSS和JS文件还得单独下。Playwright功能类似,支持多浏览器。我拿它下过一个用Vue做的后台管理界面,效果不错。缺点是慢,每个页面都要等渲染,下几百页得跑一晚上。
下别人代码之前,先看robots.txt和版权声明。很多站明确禁止爬取,技术能做到不代表你该做。另外,下下来的代码只是前端,后端逻辑、数据库、API密钥你拿不到。有人以为扒了前端就能复制一个站,结果发现登录、支付、搜索全废——那些靠服务器。
还有,别用那些“一键下载整站”的在线工具。它们要么塞广告,要么偷偷把你的URL卖给第三方。我试过一个叫“SiteSucker”的Mac应用,界面友好,但下到一半经常卡死,日志里一堆404。
最后说个冷门的:SingleFile扩展。它能把当前页面所有资源打包成一个HTML文件,连字体和背景图都内联进去。适合保存文章或教程,但整站下载不行。我拿它存了不少技术文档,离线看很方便。
工具就这些,选哪个看你要下什么。静态站用HTTrack或wget,动态站上Puppeteer。别指望一个工具通吃,也别下完就到处传——自己研究没问题,公开分发可能惹麻烦。