五分钟快速学习优秀网站的HTML骨架布局设计

一.编写多级过滤脚本,在控制台执行copy方法进行提取:

在这里插入图片描述


过滤脚本脚本

// 在浏览器F12的控制台里,直接执行以下脚本
copy(
  document.documentElement.outerHTML
    // 一级过滤:移除动态内容
    .replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, '')
    .replace(/<link[^>]+>/gi, '') 
    .replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, '')
    
    // 二级过滤:清理属性
    .replace(/ (class|style|data-[^=]+)="[^"]*"/gi, '') 
    .replace(/ (id|name|aria-\w+)="[^"]*"/gi, '')
    .replace(/<([a-z]+)( [^>]*)?>/gi, '<$1>') // 保留标签名
    
    // 三级过滤:移除非结构元素
    .replace(/<img[^>]+>/gi, '')
    .replace(/<svg[\s\S]*?<\/svg>/gi, '')
    .replace(/<picture[\s\S]*?<\/picture>/gi, '')
    .replace(/<canvas[\s\S]*?<\/canvas>/gi, '')
    
    // 四级过滤:压缩空白
    .replace(/\s+/g, ' ')
    .replace(/>\s+</g, '><')
);

各层级过滤详解

层级过滤目标正则表达式示例作用说明
1动态内容<script[^>]*>[\s\S]*?</script>移除所有脚本和样式表
2非必要属性 (class|style)="[^"]*"保留纯标签无属性
3媒体资源<img[^>]+>删除图片/SVG等二进制内容
4结构冗余<!--.*?-->清除注释
5空白压缩>\s+<><最小化空白字符

高级优化技巧

  1. 智能标签保留
// 只保留结构性标签(div/section等),移除内容型标签
.replace(/<(?!\/?(div|section|header|footer|main|nav|ul|ol|li)|html|body)[^>]+>/gi, '')
  1. DOM层级压缩
// 合并连续嵌套的div(常见结构冗余)
.replace(/<div>\s*<div>/g, '<div>')
.replace(/<\/div>\s*<\/div>/g, '</div>')
  1. CSS选择器逆向标记
// 为关键元素添加注释标记(便于后续还原)
.replace(/<header>/g, '<!-- header-start --><header>')
.replace(/<\/header>/g, '</header><!-- header-end -->')

可视化结构提取工具

还可以使用Chrome浏览器内置的 Accessibility Tree 获取最简结构:

  1. 打开 Chrome 开发者工具 (F12)
  2. 切换到 Elements 面板
  3. 右键点击 <html> 标签 → CopyCopy accessibility tree
  4. 获得纯文本结构:
Document
├── Heading "Baidu"
├── Navigation
│   ├── Link "Home"
│   ├── Link "Demo"
└── Main
    ├── Section
    │   ├── Heading "Introduction"

最终效果对比

过滤前过滤后压缩率
原始HTML 1.2MB骨架HTML 86KB92.8%
包含328个DOM节点保留89个关键节点72.9%
含32个外部资源引用零外部依赖100%

注意事项

  1. 动态生成内容的处理
    若目标站使用React/Vue等框架,需先触发所有懒加载后再执行脚本:

    // 滚动到页面底部触发动态加载
    window.scrollTo(0, document.body.scrollHeight);
    setTimeout(() => { /* 执行提取代码 */ }, 3000);
    
  2. PWA应用的特别处理
    对于使用Service Worker的网站,需先卸载SW:

    navigator.serviceWorker.getRegistrations().then(regs => 
      regs.forEach(reg => reg.unregister())
    
  3. CSS样式的快速采集

    // 提取所有内联样式(含媒体查询)
    Array.from(document.styleSheets).forEach(sheet => {
      try { // 规避跨域样式表报错
        Array.from(sheet.cssRules).forEach(rule => 
          console.log(rule.cssText)
        )
      } catch(e) {}
    });
    

二、其他高效学习工具推荐

1. 浏览器扩展(合法使用)

  • SnapCopy:一键复制元素及其父级结构
  • CSS Peeper:可视化提取颜色/字体/间距
  • VisBug:设计工具直接测量页面元素

2. 半自动化流程

// 生成简化版HTML骨架(控制台运行)
const clonePage = () => {
  const html = document.documentElement.cloneNode(true);
  // 清理脚本和外部资源
  html.querySelectorAll('script, link[rel="stylesheet"], iframe').forEach(el => el.remove());
  // 保留内联样式
  const styles = document.createElement('style');
  styles.textContent = Array.from(document.styleSheets)
    .map(sheet => {
      try { return Array.from(sheet.cssRules).map(r => r.cssText).join('\n'); } 
      catch { return ''; }
    }).join('\n');
  html.querySelector('head').appendChild(styles);
  return html.outerHTML;
};
copy(clonePage());

三、确保合法合规学习

1. 敏感信息剔除

  • 配合正则表达式清洗工具(如VS Code的查找替换):
    // 清除敏感信息
    (data-\w+="[^"]*")|(id="[^"]*")|(<!--.*?-->)
    

2. 结构化学习步骤

  1. 布局逆向工程
    用CSS Grid Generator重建目标网站的网格系统

  2. 色彩系统提取
    使用Chrome开发者工具的Styles面板,配合以下代码提取主色系:

    // 提取页面使用最多的5种颜色
    const colors = new Map();
    Array.from(document.querySelectorAll('*'))
      .map(el => getComputedStyle(el).color)
      .forEach(color => colors.set(color, (colors.get(color) || 0) + 1));
    console.log([...colors.entries()].sort((a,b) => b[1]-a[1]).slice(0,5));
    
  3. 动效分解
    用Chrome的Performance面板录制交互过程,分析关键帧:

    // 测量动画执行时间
    const el = document.querySelector('.animated-element');
    el.addEventListener('animationstart', () => 
      console.time('animation'));
    el.addEventListener('animationend', () => 
      console.timeEnd('animation'));
    

四、Linux下如何学

  1. 混合开发

    # 使用wget仅下载允许爬取的内容(需遵守robots.txt)
    wget --mirror --convert-links --adjust-extension --page-requisites --no-parent https://www.baidu.com/
    
  2. 代码转化学习
    通过AST Explorer解析目标网站的CSS/JS,生成可视化语法树,学习其代码组织方式

  3. 组件化重构
    将提取的页面拆分为Vue/React组件:

    // 示例:导航栏组件转换
    const NavBar = () => (
      <header className="navbar" style={{ 
        display: 'flex', 
        justifyContent: 'space-between' 
      }}>
        <img src="/logo.png" className="logo" />
        <nav className="menu">
          {['Home', 'Demo', 'Docs'].map(item => (
            <a key={item} href={`#${item.toLowerCase()}`}>
              {item}
            </a>
          ))}
        </nav>
      </header>
    );
    

五、法律风险规避措施

  1. 元数据清洗脚本
# 使用BeautifulSoup清洗下载的HTML
from bs4 import BeautifulSoup

with open('downloaded.html') as f:
    soup = BeautifulSoup(f, 'html.parser')

# 删除版权相关meta标签
for meta in soup.select('meta[name*="rights"], meta[name*="author"]'):
    meta.decompose()

# 重写title
soup.title.string = "My Learning Project"

with open('clean.html', 'w') as f:
    f.write(str(soup))
  1. 差异化改造清单
  • 修改所有class/id命名规则(如BEM规范)
  • 将固定像素单位转换为rem/vw响应式单位
  • 使用Sass/PostCSS重构样式表结构
  • 添加原创功能模块(如暗黑模式切换)

上述所有操作仅供学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981242.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

硬件学习笔记--47 LDO相关基础知识介绍

目录 1.LDO主要功能介绍 2.LDO相关参数介绍 3.使用方法 4.优、缺点 1.LDO主要功能介绍 LDO&#xff08;Low Dropout Regulator&#xff09;是一种线性稳压器&#xff0c;用于将输入电压转换为稳定的输出电压。其主要功能包括&#xff1a; 1&#xff09;稳压功能&#xff1…

利用矩阵相乘手动实现卷积操作

卷积&#xff08;Convolution&#xff09; 是信号处理和图像处理中的一种重要操作&#xff0c;广泛应用于深度学习&#xff08;尤其是卷积神经网络&#xff0c;CNN&#xff09;中。它的核心思想是通过一个卷积核&#xff08;Kernel&#xff09; 或 滤波器&#xff08;Filter&am…

STM32-HAL库初始化时钟

使能和失能外设GPIOA 时钟信号初始化函数 HAL_RCC_OscConfig函数&#xff1a; HAL_StatusTypeDef是该函数的返回值类型,最顶上的那句话只是这个函数的原型 HAL_RCC_ClockConfig函数&#xff1a; 因为FLASH实际上只能支持24MHz的时钟信号所以如果用高于24MHz的信号输入则要用到等…

windows环境执行composer install出错

现在的项目环境都是要求比较新的版本&#xff0c;就比如今天部署测试一个新框架遇到了下面这些问题&#xff0c;报错原因有以下几点&#xff1a; PHP版本低了&#xff0c;现在的新项目都是要求PHP8以上版本&#xff1b;指令废弃&#xff0c;配置文件禁用即可&#xff1b;切换P…

Three.js 入门(光线投射实现3d场景交互事件)

本篇主要学习内容 : 光线投射器交互事件 点赞 关注 收藏 学会了 1.光线投射器 Raycaster 此类旨在协助光线投射。光线投射用于鼠标拾取&#xff08;确定鼠标在 3D 空间中的哪些对象上&#xff09;等。 Raycaster( origin : Vector3, direction : Vector3, near : Float,…

蓝桥杯web第三天

展开扇子题目&#xff0c; #box:hover #item1 { transform:rotate(-60deg); } 当悬浮在父盒子&#xff0c;子元素旋转 webkit display: -webkit-box&#xff1a;将元素设置为弹性伸缩盒子模型。-webkit-box-orient: vertical&#xff1a;设置伸缩盒子的子元素排列方…

Unity 使用NGUI制作无限滑动列表

原理&#xff1a; 复用几个子物体&#xff0c;通过子物体的循环移动实现&#xff0c;如下图 在第一个子物体滑动到超出一定数值时&#xff0c;使其放到最下方 --------------------------------------------------------------》 然后不停的循环往复&#xff0c;向下滑动也是这…

网络安全蜜罐产品研究现状

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、知识点总结 1、蜜罐&#xff08;Honeypot&#xff09;&#xff1a;诱捕攻击者的一个陷阱。 2、蜜网&#xff08;Honeynet&#xff09;&#xff1a;采用了技术…

SpringBoot3—场景整合:环境准备

一、云服务器 阿里云服务器开通安装以下组件 dockerrediskafkaprometheusgrafana 下载windterm&#xff1a;https://github.com/kingToolbox/WindTerm/releases/download/2.5.0/WindTerm_2.5.0_Windows_Portable_x86_64.zip 重要&#xff1a;开通云服务器以后&#xff0c;请一…

Ollama进行DeepSeek本地部署存在安全风险解决方案,nginx反向代理配置

文章目录 概要整体架构流程技术细节**## 1.下载nginx [https://nginx.org/en/download.html](https://nginx.org/en/download.html),推荐Stable version稳定版**2.下载完成解压文件,打开conf文件夹下的nginx.conf,贴上反向代理配置3.然后点击解压文件夹下的nginx.exe,启动成…

【音视频】ffmpeg音视频处理基本流程

一、ffmpeg音视频处理基本流程 首先先看两条命令 ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 1280x720 2.flv ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 -s 1280x720 3.mkv-i :表示输入源&#xff0c;这里是1.mp4&#xff0c;是当前路径下的视频文件-acodec copy…

计算机网络基础:认识网络拓扑结构

计算机网络基础&#xff1a;认识网络拓扑结构 一、前言二、网络拓扑结构的基本概念2.1 定义2.2 作用 三、常见的物理拓扑结构3.1 总线型拓扑结构3.1.1 定义和结构3.1.2 工作原理3.1.3 优点3.1.4 缺点3.1.5 适用场景3.1.6 示例图 3.2 星型拓扑结构3.2.1 定义和结构3.2.2 工作原理…

基于Android平台的SOME/IP测试模块 EPT-ETS

在汽车产业智能化、网联化的时代浪潮中&#xff0c;汽车电子系统正经历着前所未有的变革。SOME/IP&#xff08;Scalable service-Oriented MiddlewarE over IP&#xff09;协议作为汽车电子通信领域的关键技术&#xff0c;其稳定性、可靠性与高效性对于整车性能的提升起着至关重…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch批量写入性能调优实战&#xff1a;2.2.3 案例&#xff1a;电商订单日志每秒10万条写入优化1. 原始架构与瓶颈分析1.1 初始集群配置1.2 性能瓶颈定位 2. 全链路…

解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题

一.软件环境 windows10、11系统、springboot2.x、redis 6 7 linux&#xff08;centos&#xff09;系统没有出现这问题&#xff0c;如果你是linux系统碰到的&#xff0c;本文也有一定大参考价值。 根本思路就是&#xff1a;tcp/ip连接的保活(keepalive)。 二.问题描述 在spr…

【开源项目-AI研发】ai-engineer-toolkit

项目地址&#xff08;Fork: 40, Star: 301&#xff09; GitHub - break-into-data/ai-engineer-toolkit: Projects & Resources to help you become a better AI Developer. 项目介绍 官方介绍&#xff1a;帮助你成为更好的 AI 开发者的工具和资源 项目本身是个表格&am…

白帽子讲Web安全资源下载

资源简介 本仓库提供《白帽子讲Web安全》一书的资源下载。这本书由阿里巴巴安全专家刺总编写&#xff0c;是网络安全领域的经典之作&#xff0c;对于从事网络安全工作的专业人士来说是必备的参考资料。 资源描述 书名: 白帽子讲Web安全作者: 阿里巴巴刺总适用人群: 网络安全…

深度学习架构Seq2Seq-添加并理解注意力机制(一)

第一章&#xff1a;人工智能之不同数据类型及其特点梳理 第二章&#xff1a;自然语言处理(NLP)&#xff1a;文本向量化从文字到数字的原理 第三章&#xff1a;循环神经网络RNN&#xff1a;理解 RNN的工作机制与应用场景(附代码) 第四章&#xff1a;循环神经网络RNN、LSTM以及GR…

基于springboot的丢失儿童的基因比对系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 本丢失儿童的基因比对系统采用B/S架构&#xff0c;数据库是MySQL&#xff0c;网站的搭建与开发采用了先进的Java进行编写&#xff0c;使用了Spring Boot框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。用户主要功能包括&#xff1a;用户注册、登…

Mysql面试篇笔记:

优化&#xff1a; 1.如何定位慢查询&#xff1a; 首先压测接口&#xff0c;查看那个接口比较慢&#xff0c;可以通过多种工具&#xff0c;比如Skywaking 可以查看各个接口响应时间&#xff0c;查看接口最慢&#xff0c;然后去跟踪接口&#xff0c;查看详细信息&#…