Python爬虫:教你如何使用Python解析HAR请求文件(附源码)

2024-01-19 02:59

本文主要是介绍Python爬虫:教你如何使用Python解析HAR请求文件(附源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“python学习与大数据分析”关注

一、什么是HAR文件?

在Web开发和网络性能测试中,Har文件是一个非常重要的工具。Har文件是HTTP Archive的缩写,它是一个格式化的文件,包含了HTTP请求和响应的所有信息,对于我们来说,我们就可以通过解析这些请求获取到其中的请求头、请求方法、请求参数、响应内容。

二、如何获取到HAR文件?

要将网络请求保存为HAR文件,您可以使用浏览器的开发者工具。以下是我笔记本自带的联想浏览器中执行此操作的步骤(其他浏览器应该也差不多):

  1. 打开联想浏览器并进入开发者工具。您可以通过按下F12键或右键单击页面并选择“检查”来打开开发者工具。

  2. 在开发者工具中,转到“Network”选项卡。

  3. 在页面上执行所需的网络请求。例如,您可以在页面上单击链接或提交表单。

  4. 在Network选项卡中,您将看到所有网络请求的列表。选择您想要保存为HAR文件的请求。

  5. 右键单击选定的网络请求并选择“Save all as HAR with Content”。

  6. 选择保存文件的位置,然后单击“保存”。

三、使用Python解析HAR文件

由于工作原因,我之前写过解释HAR文件的函数,这里直接贴出来给大家直接使用:


'''
describe:
date:2023/10/23
'''
import json# 传入
def har_analyze(harfile):print(f"开始处理HAR文件:{harfile}")try:with open(harfile, 'r', encoding='utf-8') as harfile:conent = harfile.read()if conent.startswith(u'\ufeff'):conent = conent.encode('utf8')[3:].decode('utf8')har_dict = json.loads(conent)requestList = har_dict['log']['entries']if len(requestList) == 0:msg = "HAR文件中无请求内容!"return msgtest_data_list = [['No', 'case_name', 'url', 'method', 'headers', 'req_params', 'req_data', 'req_json','assert_method', 'expect_data', 'req_var', 'resp_var', 'result']]No = 1for i in range(len(requestList)):item = requestList[i]method = item['request']['method']if method.lower() not in ['get', 'post']:continueurlString = item['request']['url']start = urlString.index('://')tempStr = urlString[start + 3:]url_start = tempStr.index('/')protocol = urlString[:start + 3]domain = tempStr[:url_start]host = protocol + domainURL = tempStr[url_start:]requst_type = item['request']['postData']['mimeType']request_data  = item['request']['postData']['text']req_params,req_json,req_data = '', '', ''if request_data and requst_type:# get请求URL中已经携带参数,此处不再提取参数if method.lower() == 'post' and requst_type == 'application/json':req_json = request_dataelse:req_data = request_datanew_headers = {}headers = item['request']['headers']for j in headers:# try:#     if j['name'] == 'Cookie' :#         j['value'] = '${Cookie}'#     if j['name'] == 'Authorization':#         j['value'] = '${Authorization}'# except Exception as e:#     passnew_headers[j['name']] = j['value']response = item['response']['content']['text']if not response:continuenew_list = [f'{No}', f'testcase_{No}', f'{URL}', f'{method}', f'{json.dumps(new_headers)}', f'{req_params}',f'{req_data}', f'{req_json}', 'AssertJsonTree', f'{response}', '', '', '']test_data_list.append(new_list)No +=1if len(test_data_list)>1:print(f"HAR文件解析成功,共有:{len(test_data_list)-1}个请求")return test_data_list,hostelse:print("HAR解析出来的数据为0个请求")returnexcept Exception as e:print("HAR文件解析失败")

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除

这篇关于Python爬虫:教你如何使用Python解析HAR请求文件(附源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621078

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后