简介:本文详细介绍如何通过浏览器生成HAR文件以及利用Fiddler软件手工抓取静态网页资源,提供从基础操作到高级技巧的全流程指导,帮助开发者高效获取网页数据。
在Web开发与测试领域,手工抓取静态网页资源是分析页面结构、调试性能问题或提取特定数据的基础技能。无论是前端开发者优化页面加载速度,还是测试工程师验证接口响应,掌握资源抓取方法都能显著提升工作效率。本文将系统介绍两种核心方法:通过浏览器开发者工具生成HAR(HTTP Archive)文件,以及借助Fiddler软件拦截网络请求,帮助读者从入门到精通静态网页资源的抓取。
HAR文件是一种JSON格式的存档,记录了浏览器与服务器交互过程中的所有网络请求与响应信息,包括:
其优势在于无侵入性(无需安装额外软件)和数据完整性(覆盖整个页面加载过程),适合快速分析页面资源依赖关系。
以Chrome浏览器为例,生成HAR文件的步骤如下:
F12或右键页面选择“检查”,切换至Network标签。Preserve log(防止页面跳转后日志丢失)。... → More tools → Export HAR。注意事项:
生成的HAR文件可通过以下方式分析:
Network标签中直接拖入HAR文件,可按域名、类型、时间等维度筛选请求。HAR Analyzer(在线解析)、Wireshark(导入HAR分析网络包)。haralyzer库提取关键数据:
from haralyzer import HarParserwith open('example.har', 'r') as f:har_parser = HarParser(f.read())# 获取所有CSS请求的URLcss_requests = [entry['request']['url'] for entry in har_parser.har_data['log']['entries']if entry['request']['url'].endswith('.css')]
Fiddler是一款免费的HTTP调试代理工具,其优势在于:
安装与启动:
Tools → Options → HTTPS → 勾选Decrypt HTTPS traffic)。设置浏览器代理:
设置 → 系统 → 打开计算机代理设置,启用“使用代理服务器”,地址填127.0.0.1,端口8888(Fiddler默认端口)。Tools → Options → Connections → 勾选Allow remote computers to connect(需重启Fiddler)。开始抓包:
File → Capture Traffic(或按F12切换抓包状态)。过滤与保存:
Filters标签中输入目标域名(如example.com)。Show only the following Hosts并指定资源类型(如.css、.js)。Save → All Sessions,可选择.saz格式(Fiddler专用)或导出为HAR。修改请求数据:
Inspectors标签。WebView或TextView中编辑请求体,点击Run to Completion发送修改后的请求。自动重放请求:
Replay → Reissue Requests。模拟弱网环境:
Rules → Customize Rules(或按Ctrl+R)。OnBeforeRequest方法,添加延迟代码:
if (oSession.uriContains("example.com")) {oSession["request-trickle-delay"] = "3000"; // 延迟3秒}
| 场景 | HAR文件 | Fiddler |
|---|---|---|
| 快速分析页面资源 | ✅ 导出即用,无需额外配置 | ❌ 需配置代理 |
| 修改请求/响应数据 | ❌ 仅记录,不可修改 | ✅ 支持实时编辑 |
| 长期监控网络请求 | ❌ 一次性抓取 | ✅ 可持续记录 |
| 跨设备调试 | ❌ 依赖浏览器环境 | ✅ 支持手机代理(需配置WiFi) |
推荐策略:
假设需抓取某电商网站的商品列表页(含价格、库存等信息),步骤如下:
使用HAR文件定位关键请求:
/api/products?page=1)。通过Fiddler验证接口:
page=2),验证分页逻辑是否正确。自动化脚本提取数据:
import requests# 模拟Fiddler中抓取到的请求头headers = {'User-Agent': 'Mozilla/5.0','Referer': 'https://example.com/products'}response = requests.get('https://example.com/api/products?page=1', headers=headers)products = response.json()['data'] # 假设响应为JSON格式
原因:浏览器设置中启用了“禁用缓存”或“清除页面数据”。
解决:在Network标签中取消勾选Disable cache,并确保Preserve log已启用。
原因:未安装Fiddler的根证书或证书信任设置错误。
解决:
Tools → Options → HTTPS,点击Actions → Trust Root Certificate。certmgr.msc),将Fiddler的证书移至“受信任的根证书颁发机构”。原因:手机未正确配置代理或Fiddler未启用远程连接。
解决:
8888)。Allow remote computers to connect并重启软件。手工抓取静态网页资源是Web开发与测试的基础技能,HAR文件与Fiddler软件分别提供了“快速记录”与“深度调试”的双重能力。通过本文的指导,读者可掌握:
延伸学习建议:
requests库,构建定制化的网页资源抓取工具;掌握这些技能后,开发者将能更高效地分析页面性能、调试接口问题,甚至构建小型的数据采集系统,为项目开发提供有力支持。