可狱可囚的爬虫系列课程 19:静态页面和动态页面之分

ops/2025/3/10 19:59:03/

爬虫开发中,静态页面动态页面的核心区别在于数据的生成和加载方式,理解两者的差异直接影响爬虫技术选型和数据抓取策略;掌握静态/动态页面的区别,可显著提升爬虫效率和成功率。

一、静态页面(Static Page)

静态页面的内容(1)在服务器预先生成,以 .html 文件形式存储,用户每次访问时返回相同的 HTML 代码。(2)数据直接嵌入在 HTML 中(如文本、表格、链接等)。(3)纯 HTML + CSS,无复杂交互逻辑。 类似于以下代码:

<!-- 服务器预生成的 HTML -->
<html><body><h1>商品列表</h1><ul><li>商品1:价格 100 元</li><li>商品2:价格 200 元</li></ul></body>
</html>

静态页面的数据可以直接通过 requestsurllib 请求 URL,使用 BeautifulSoup4lxml 等解析 HTML。 抓取简单,无需执行 JavaScript。

二、动态页面(Dynamic Page)

动态页面的内容可以由(1)服务端动态渲染,服务器根据请求参数(如用户身份、Cookie)实时生成 HTML(如 PHP、Java 动态页面)。 也可以由客户端动态渲染,通过 JavaScript 在浏览器中异步加载数据(如 Vue/React 单页应用)。(2)初始 HTML 中无数据,通过 Ajax 或 Fetch API 从后端接口获取数据(如 JSON 格式)。(3) 采用 JavaScript 框架(React / Vue / Angular)+ 后端 API 的技术栈进行设计开发。类似于以下代码:
<!-- 初始 HTML(无数据) -->
<html><body><div id="app"></div><script>// 通过 JavaScript 动态加载数据fetch('/api/products').then(res => res.json()).then(data => {document.getElementById('app').innerHTML = `<ul>${data.map(item => `<li>${item.name}:价格 ${item.price} 元</li>`).join('')}</ul>`;});</script></body>
</html>

动态页面的数据可以通过(1) 直接调用 API 的形式进行爬取,但是当无法找到 API 时,可以使用(2) 浏览器渲染工具(SeleniumPlaywrightPuppeteer 等控制浏览器,等待 JavaScript 执行完成后再解析页面)进行爬取。

三、核心区别

对比维度静态页面动态页面
数据位置直接嵌入 HTML通过接口异步加载(JSON/XML)
URL 变化URL 对应唯一 HTML 文件URL 可能不变(单页应用)
反爬难度低(直接解析 HTML)高(需处理加密接口或模拟浏览器)
技术复杂度简单复杂(需分析接口或执行 JS)
典型场景文档、博客、老式网站等电商、社交平台、管理系统等

四、如何判断页面类型

(1)查看网页源代码:右键 → 查看网页源代码,搜索页面中可见的内容。 静态页面的内容存在于源代码中;动态页面的源代码中无数据,需执行 JS 后生成。

(2)分析网络请求:打开浏览器开发者工具(F12 → Network),刷新页面,静态页面仅加载 HTML、CSS、图片等资源;动态页面存在 XHR/Fetch 请求(通常返回 JSON)。

五、关键注意事项

(1)优先调用 API:动态页面尽量通过接口直接获取数据,减少资源消耗。
(2)反爬对抗:动态页面常伴随反爬措施(如滑块验证、Token 验证、IP 封禁等),需结合代理 IP、请求头模拟等手段。
(3)性能权衡:浏览器渲染工具(如 Selenium)占用资源高,仅作为备用方案。


http://www.ppmy.cn/ops/164741.html

相关文章

五子棋对弈

1.五子棋对弈 - 蓝桥云课 问题描述 “在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f;”不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着“友谊第一&#xff0c;比赛第二”的宗旨&…

Halcon:HObject与opencv:Mat互转

Halcon:HObject与opencv:Mat互转 1. Mat转HObject2. HObject转Mat 1. Mat转HObject void MatToHObject(Mat mat, out HObject hObj){int width mat.Width;int height mat.Height;HTuple type, pointer, widthTuple, heightTuple;if (mat.Channels() 1){// 单通道图像&#x…

分布式锁—4.Redisson的联锁和红锁一

大纲 1.Redisson联锁MultiLock概述 2.Redisson联锁MultiLock的加锁与释放锁 3.Redisson红锁RedLock的算法原理 4.Redisson红锁RedLock的源码分析 1.Redisson联锁MultiLock概述 (1)MultiLock的简介 (2)MultiLock的使用 (3)MultiLock的初始化 (1)MultiLock的简介 一.一次…

解析 SQL,就用 sqlparse!

文章目录 解析 SQL&#xff0c;就用 sqlparse&#xff01;一、背景&#xff1a;为什么你需要 sqlparse&#xff1f;二、什么是 sqlparse&#xff1f;三、如何安装 sqlparse&#xff1f;四、简单易用的库函数1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…

Android笔记:android 6.0 TextView对state_selected失效

在 Android 6.0 系统中&#xff0c;TextView 的 state_selected 状态失效可能由多种原因导致&#xff0c;下面为你详细分析原因并提供相应的解决办法。 原因分析 系统兼容性问题 Android 6.0 系统在处理视图状态和样式方面可能存在一些兼容性问题&#xff0c;导致 state_selec…

基于Spring Boot的扶贫助农系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【认知学习篇】【DeepSeek 深度解析:技术原理、算法模型与架构设计】

大家好,今天咱们来聊聊 DeepSeek,这个听起来有点高大上的技术。其实,DeepSeek 并不是什么神秘的黑科技,它本质上是一个基于深度学习的智能系统,主要用于处理复杂的任务,比如自然语言处理、计算机视觉等。接下来,我会从技术原理、算法模型和架构设计三个方面,带大家深入…

创新监管,保障生产安全

在现代工业生产中&#xff0c;电气焊作业是不可或缺的一环&#xff0c;但同时也伴随着一定的安全风险。为了提高焊接作业的安全性&#xff0c;迪格特电子科技有限公司开发了电气焊安全作业管理平台&#xff0c;该平台通过智能化监管系统&#xff0c;实现了对焊机联网的全面监管…