Python 爬虫进阶技巧:网页懒加载内容完整爬取实战

news2026/5/7 21:23:45
前言现代 Web 前端开发全面迈入前后端分离架构Ajax 异步通信技术成为数据交互的核心方式。区别于传统网页同步刷新的请求模式Ajax 基于 XMLHttpRequest 与 Fetch API 实现无刷新数据交互网页仅局部更新业务内容无需重载完整 HTML 页面大幅提升交互流畅度与资源利用率。资讯信息流、电商商品列表、评论分区、实时榜单、动态评论等核心业务模块均依托 Ajax 接口完成数据下发与页面渲染。对于爬虫开发而言Ajax 架构带来了全新的采集难点。静态页面源码仅保留页面骨架与样式代码核心结构化数据不再内嵌 HTML 标签而是通过异步接口以 JSON、XML 等格式单独传输。常规 requests 直接抓取页面源码的方式只能获取空容器与静态模板无法拿到真实业务数据这也是动态网页数据采集失效的核心诱因之一。熟练掌握 Ajax 抓包、接口定位、参数分析、数据解析与接口复刻是爬虫进阶开发的核心必修技能也是对抗动态渲染网页最高效、最高性能的解决方案。本文系统性拆解 Ajax 异步交互底层原理、主流接口类型、抓包实操流程、参数逻辑与数据解析方案结合真实实战代码完成全流程落地。全文全程采用接口直采方案对比浏览器渲染爬虫的优劣讲解加密参数、分页规则、请求鉴权等常见难点。本次开发所需工具库官方查阅与安装链接如下requests 官方文档、json 标准库文档、urllib.parse 工具库、pycryptodome 加密库。所有案例代码可独立运行适配中小型资讯平台、电商站点、社区论坛等主流 Ajax 架构网站帮助开发者脱离浏览器渲染冗余开销构建轻量、高速、高并发的异步接口爬虫体系。一、Ajax 异步技术核心原理1.1 Ajax 基础运行机制Ajax 全称为异步 JavaScript 与 XML是一套无需刷新整个页面即可实现局部数据交互的前端技术体系。现阶段主流站点已逐步以 JSON 替代 XML 作为数据传输格式但 Ajax 通信逻辑仍被广泛沿用。其核心运行流程分为四个核心阶段第一页面初始化加载静态 HTML、CSS 与基础 JS 框架完成页面基础布局渲染第二前端页面触发加载、滚动、点击等事件JS 脚本主动创建请求对象向后端指定接口发起异步请求第三服务端接收请求参数完成数据查询、逻辑运算与数据封装返回结构化数据报文第四前端监听接口响应结果通过 JS 解析返回数据动态拼接 DOM 元素完成页面局部渲染更新。整个数据请求过程独立于页面主加载流程属于异步执行逻辑不会阻塞页面操作这也是现代信息流网站无限加载、实时刷新的技术根基。1.2 同步请求与异步请求核心差异传统网页属于同步请求模式客户端发起请求后浏览器进入阻塞等待状态服务返回完整页面代码后才会完成页面渲染与内容展示。而 Ajax 异步请求非阻塞执行二者核心差异直接决定爬虫采集逻辑具体对比内容如下表所示表格对比维度传统同步请求Ajax 异步请求爬虫采集影响数据承载形式业务数据内嵌 HTML 源码独立接口返回 JSON/XML 数据同步可直接解析源码异步需抓接口页面刷新方式整页重载刷新局部无刷新更新异步无法通过静态源码获取新增内容请求触发时机页面打开一次性请求事件触发、延时加载、滚动触发需模拟触发条件或主动调用接口传输数据量传输完整页面代码体积大仅传输结构化数据体积精简接口采集速度更快流量消耗更低响应阻塞特性请求期间页面阻塞卡顿异步非阻塞页面持续交互接口请求时序复杂存在参数依赖1.3 爬虫视角下 Ajax 接口分类依据请求方式、数据格式与鉴权逻辑可将互联网主流 Ajax 接口划分为三类不同类型接口的抓包难度、复刻成本、解析方式存在明显区别明文无参基础接口采用 GET 请求接口参数明文展示无加密、无签名、无 Token 鉴权多见于小型资讯站点、个人博客抓包与复刻难度最低常规分页参数接口以 POST/GET 混合请求为主携带页码、条数、时间戳等常规参数无复杂加密仅做基础请求限制是电商、资讯平台主流接口形式加密鉴权接口接口参数加密处理请求头携带 Token、Sign 签名、Cookie 校验参数存在时序加密、动态密钥生成机制常见于大型平台与高反爬站点。二、Ajax 抓包完整实操流程2.1 浏览器开发者工具抓包基础抓包是定位 Ajax 接口的核心手段主流 Chrome、Edge、Firefox 浏览器均内置开发者网络调试工具无需额外安装抓包软件即可完成异步接口捕获。标准抓包操作流程固定适配所有 Ajax 站点第一步打开目标网页按下 F12 快捷键调出开发者工具切换至 Network 网络面板第二步筛选请求类型点击 XHR/Fetch 选项单独过滤 Ajax 异步请求过滤静态资源、图片、CSS、JS 等无效请求第三步触发页面数据加载行为如下拉刷新、滚动加载、点击加载更多、切换分类等操作第四步观察网络面板实时刷新的请求列表逐个核对请求名称、请求地址、响应内容第五步筛选响应中包含目标业务数据的请求即为核心 Ajax 数据接口。2.2 接口核心信息提取要点锁定目标 Ajax 接口后需要完整记录五项核心信息用于后续 Python 代码复刻请求缺一不可请求 URL接口完整访问地址区分主域名与接口路由请求方式明确为 GET 或 POST 请求两种请求传参逻辑完全不同请求参数URL 拼接参数、表单参数、JSON 请求体参数完整记录请求头信息UA、Referer、Content-Type、Cookie、Authorization 等关键鉴权头部响应数据格式确认返回数据为标准 JSON、嵌套 JSON、加密字符串等格式。2.3 接口参数常见规则说明GET 类型 Ajax 接口多采用 URL 拼接参数以问号拼接键值对多参数通过 符号分隔POST 类型接口分为表单传参与 JSON 传参表单参数格式为普通键值对JSON 传参则需要严格匹配请求头 Content-Type 为 application/json参数以字典序列化格式传输。部分接口会携带 timestamp 时间戳、nonce 随机数等动态参数用于防止接口恶意批量请求。三、基础明文 Ajax 接口爬取实战3.1 场景业务分析明文无参 / 简易参数 Ajax 接口是入门级异步接口场景广泛应用于地方性资讯网站、垂直领域内容站点。此类接口无加密签名、无身份校验、参数逻辑简单仅依靠基础请求头限制裸机爬虫访问复刻难度极低适合新手理解 Ajax 接口采集完整流程。该类场景核心优势在于接口返回标准结构化 JSON 数据无需复杂 HTML 解析通过字典取值即可精准提取标题、摘要、发布时间、链接等字段解析效率远高于网页标签定位。3.2 完整实战代码python运行import requests import json # 基础请求头伪装规避基础访问拦截 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36, Referer: https://www.example-news.com/, Content-Type: application/json; charsetutf-8 } # 抓包获取的核心Ajax异步接口 ajax_api_url https://www.example-news.com/api/article/list # GET请求携带分页参数 params { page: 1, limit: 20, category: tech, timestamp: 1746589236 } def get_simple_ajax_data(): try: # 发起Ajax接口请求 response requests.get( urlajax_api_url, headersheaders, paramsparams, timeout12 ) # 设置响应编码防止中文乱码 response.encoding utf-8 # 将接口JSON字符串转为Python字典 json_data response.json() # 校验接口返回状态码 if json_data.get(code) 200: data_list json_data.get(data, []) result [] for item in data_list: news_info { 文章ID: item.get(id), 文章标题: item.get(title), 文章简介: item.get(intro), 发布时间: item.get(create_time), 原文链接: item.get(url) } result.append(news_info) return result else: print(接口数据请求异常状态码错误) return [] except Exception as e: print(f接口请求失败{str(e)}) return [] # 程序入口执行 if __name__ __main__: news_data get_simple_ajax_data() print(f本次Ajax接口采集数据总量{len(news_data)}) print( * 100) for index, info in enumerate(news_data, 1): print(f{index}、标题{info[文章标题]}) print(f 简介{info[文章简介]}) print(f 发布时间{info[发布时间]}\n)3.3 代码原理深度解析XHR 请求完整复刻代码完全复刻浏览器抓包得到的接口地址、请求方式、请求头与分页参数浏览器访问的网络行为被完整模拟服务端无法区分真实用户与爬虫请求大幅提升接口访问通过率。JSON 数据快速解析机制接口直接返回标准化 JSON 报文调用 response.json () 方法可直接序列化为 Python 字典对象规避 BeautifulSoup、lxml 等 DOM 解析工具的复杂节点定位逻辑数据提取更精准、代码更简洁。异常捕获与状态校验通过 try-except 捕获网络超时、接口返回异常、JSON 解析失败等运行错误同时校验接口自定义业务码避免因接口数据结构变动导致程序崩溃提升爬虫稳健性。结构化数据封装统一字典格式封装多维度字段天然适配后续数据存储、数据分析、二次开发相较于 HTML 碎片化提取Ajax 接口数据具备更强的规整性与可用性。3.4 基础场景优化方向针对多分页采集需求可封装循环函数遍历 page 页码参数实现全站数据批量抓取针对动态时间戳参数可调用 time 模块实时生成时间戳适配接口动态参数校验规则。四、POST 类型 Ajax 接口数据解析实战4.1 场景业务分析大中型资讯平台、电商商城、社区论坛普遍采用 POST 类型 Ajax 接口传输数据。相较于 GET 接口POST 接口安全性更高参数不会暴露在 URL 地址中常用来传输复杂查询条件、用户筛选参数、加密表单数据。此类接口核心特征为参数以 JSON 请求体形式提交必须严格匹配 Content-Type 请求头为 application/json参数格式错误会直接触发接口 400 参数错误是 Ajax 爬虫开发中高频遇到的场景。4.2 完整实战代码python运行import requests # 全局请求头配置 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36, Referer: https://www.example-shop.com/, Content-Type: application/json } # POST类型Ajax商品数据接口 post_ajax_url https://www.example-shop.com/api/goods/search # 抓包获取的JSON请求参数 post_data { pageNum: 2, pageSize: 30, keyword: 数码产品, sortType: sales, priceMin: 0, priceMax: 5000 } def post_ajax_crawl(): # 发送POST异步请求携带json参数 res requests.post( urlpost_ajax_url, headersheaders, jsonpost_data, timeout15 ) # 解析响应数据 res_json res.json() goods_list res_json.get(data, {}).get(list, []) goods_result [] for goods in goods_list: goods_dict { 商品名称: goods.get(goodsName), 售卖价格: goods.get(price), 月销量: goods.get(salesNum), 店铺名称: goods.get(shopName), 商品标签: goods.get(tag) } goods_result.append(goods_dict) return goods_result if __name__ __main__: data post_ajax_crawl() print(fPOST接口采集商品数量{len(data)}) for goods in data: print(f【{goods[店铺名称]}】{goods[商品名称]} {goods[售卖价格]} 销量{goods[月销量]})4.3 代码原理深度解析JSON 请求体传输逻辑requests 库中使用 json 参数传参会自动将字典序列化为标准 JSON 字符串同时自动补全对应请求头无需手动拼接字符串保证参数格式完全符合后端接口校验规范。多层级 JSON 节点取值主流后端接口数据会采用多层嵌套结构代码通过多层字典取值精准定位列表数据适配企业级项目标准化数据返回格式避免浅层取值造成数据遗漏。筛选参数自定义拓展请求体中携带关键词、价格区间、排序规则等自定义筛选参数可灵活修改参数实现定向数据采集这是 POST 类型 Ajax 接口相较于 GET 接口的核心优势。4.4 POST 接口常见报错解决方案接口返回 400 错误多为 JSON 参数格式错误、缺少必要字段403 禁止访问多为缺少 Referer、Cookie 等鉴权请求头500 服务端错误多为参数越界、特殊字符非法传输可通过对照抓包原始请求逐项排查修复。五、带 Token 鉴权 Ajax 接口适配方案5.1 接口鉴权机制说明大型互联网平台为防止接口恶意爬取、非法调用会对核心 Ajax 接口增加鉴权机制Token 令牌认证是最主流的实现方式。用户访问页面时服务端下发唯一身份令牌前端将 Token 存入请求头后续所有异步接口请求必须携带该令牌否则直接拒绝访问。Token 分为临时会话令牌与长效登录令牌临时令牌随页面刷新实时更新长效令牌绑定用户登录状态此类接口也是 Ajax 爬虫进阶必须攻克的场景。5.2 完整实战代码python运行import requests # 携带Token鉴权的请求头 token_headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, Authorization: Bearer 258sdf56sd4f89sdf789asd123token, Referer: https://www.example-content.com/, Cookie: sessionId987654321abcdef } # 鉴权型Ajax接口 token_api https://www.example-content.com/api/comment/list # 接口请求参数 comment_params { articleId: 15896, offset: 0, limit: 25 } def token_ajax_spider(): resp requests.get(token_api, headerstoken_headers, paramscomment_params) comment_data resp.json() comment_list comment_data[data][comments] comment_info [] for com in comment_list: comment_info.append({ 用户名: com[username], 评论内容: com[content], 评论时间: com[createTime], 点赞数: com[likeCount] }) return comment_info if __name__ __main__: res token_ajax_spider() print(f共采集评论数据{len(res)}条)5.3 代码原理深度解析Authorization 头部鉴权行业通用 Token 传输方式为放置在 Authorization 请求头中搭配 Bearer 标识区分令牌类型完整复刻浏览器抓包中的头部字段即可通过服务端身份校验。会话保持联动Token 通常与 Cookie 会话绑定单一 Token 失效后需要重新访问首页获取全新令牌可通过 requests.Session 保持会话自动同步 Cookie 与动态 Token。动态 Token 获取逻辑进阶开发中可通过解析首页 HTML、提取 JS 变量、调用登录接口三种方式自动抓取 Token实现全自动化鉴权适配无需手动复制令牌。六、Ajax 接口爬虫与 Selenium 渲染爬虫优劣对比在动态网页采集场景中Ajax 接口直采与浏览器渲染是两大主流方案二者适用场景、性能消耗、开发成本差异显著合理选型可大幅提升爬虫开发效率详细对比分析如下表表格评估维度Ajax 异步接口直采Selenium 浏览器渲染场景适配建议运行速度极快直接请求结构化数据较慢需启动浏览器、加载全量资源高并发采集优先选择 Ajax 方案资源消耗内存、CPU 占用极低轻量运行资源占用高多进程部署成本大服务器低配环境禁用浏览器方案开发难度需抓包分析接口与参数逻辑无需抓包直接操作页面元素短期快速开发选用渲染方案数据精度原生 JSON 数据无解析误差二次渲染 DOM易出现元素定位偏差结构化数据优先接口采集反爬对抗需应对参数加密、签名校验易被检测自动化程序风控严格高反爬站点结合双方案使用维护成本接口更新、参数变动需重新抓包前端页面改版易导致元素失效长期项目需做好接口监控七、Ajax 抓包与爬虫开发高频问题解决7.1 接口乱码与数据格式异常部分接口未统一编码格式返回内容出现中文乱码可通过 response.encoding 手动指定 utf-8、gbk、gb2312 编码格式非常规 JSON 格式接口可使用正则清洗字符串后再进行字典转换适配异形数据报文。7.2 动态参数与加密参数处理遇到时间戳、随机字符串等动态参数依托 time、random 标准库实时生成简易 MD5、SHA 签名参数可通过 pycryptodome 库复刻前端加密算法还原签名生成逻辑突破基础参数加密限制。7.3 接口限流与访问限制Ajax 接口普遍存在频次限制短时间高频请求会触发 IP 封禁、接口限流。解决方案包含增加随机请求间隔、轮换代理 IP、拆分请求频次、模拟正常用户浏览节奏保证接口长期稳定调用。7.4 Fetch 类型异步接口适配新版前端框架大量使用 Fetch 替代传统 XHR 请求抓包时需在 Network 面板筛选 Fetch 请求其参数、头部校验逻辑与 XHR 完全一致Python 代码无需修改仅需更换抓包目标即可无缝适配。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…