python解析网页上的json数据落地到EXCEL

news2024/11/16 8:14:03

安装必要的库

import requests
import pandas as pd
import os
import sys
import io
import urllib3
import json

测试数据

  • 网页上的数据结构如下
{
    "success": true,
    "code": "CIFM_0000",
    "encode": null,
    "message": "ok",
    "url": null,
    "total": 3,
    "items": [
        {
            "summaryDate": "20240611",
            "summaryType": "naturalDay",
            "workday": true,
            "newCustNum": 1,
            "haveCustNum": 1691627,
            "newAccountNum": 2,
            "haveAccountNum": 1692934,
            "totalShare": 4947657341.69,
            "netCash": -3523387.25,
            "yield": 0.01386
        },
        {
            "summaryDate": "20240612",
            "summaryType": "naturalDay",
            "workday": true,
            "newCustNum": 5,
            "haveCustNum": 1672766,
            "newAccountNum": 5,
            "haveAccountNum": 1674071,
            "totalShare": 4927109080.29,
            "netCash": -20735233.55,
            "yield": 0.01387
        },
        {
            "summaryDate": "20240613",
            "summaryType": "naturalDay",
            "workday": true,
            "newCustNum": 4,
            "haveCustNum": 1662839,
            "newAccountNum": 5,
            "haveAccountNum": 1664146,
            "totalShare": 4927405885.59,
            "netCash": 110659.8,
            "yield": 0.01389
        }
    ],
    "data": null,
    "info": null
}

详细逻辑代码

import requests
import pandas as pd
import os
import sys
import io
import urllib3
import json

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

url = "https://ip/ma/web/trade/dailySummary?startDate={pi_startdate}&endDate={pi_enddate}"
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0",
}

def save_data(data, columns, excel_path, sheet_name):
    df = pd.DataFrame(data, columns=columns)
    if not os.path.exists(excel_path):
        df.to_excel(excel_path, sheet_name=sheet_name, index=False)
    else:
        with pd.ExcelWriter(excel_path, engine='openpyxl', mode='a') as writer:
            df.to_excel(writer, sheet_name=sheet_name, index=False)

def json2list(response_text):
    # 把json数据转化为python用的类型
    json_dict = json.loads(response_text)
    src_total = json_dict["total"]
    print("src_total: {}".format(src_total))
    items = json_dict["items"]
    excel_columns = ['summaryDate',
                     'summaryType',
                     'workday',
                     'newCustNum',
                     'haveCustNum',
                     'newAccountNum',
                     'haveAccountNum',
                     'totalShare',
                     'netCash',
                     'yield'
                     ]
    excel_data = []
    # 使用XPath定位元素并打印内容
    for item in items:
        excel_row_data = []
        for column_index in range(len(excel_columns)):
            data = str(item[excel_columns[column_index]])
            if excel_columns[column_index] == 'workday':
                data = str(0 if data == "False" else 1)
            excel_row_data.append(data)
        excel_data.append(excel_row_data)
    trg_total = len(excel_data)
    # 稽核
    print("trg_total: {}".format(trg_total))
    vn_biasval = trg_total - src_total
    if vn_biasval != 0:
        print("This audit-rule is not passed,diff: {}".format(vn_biasval))
        exit(-1)
    else:
        print("This audit-rule is passed,diff: {}".format(vn_biasval))
    return excel_columns, excel_data


if __name__ == '__main__':
    try:
        excel_path = "C:/xxx/temp/ylb_dailySummary_{pi_startdate}_{pi_enddate}.xlsx"
        sheet_name = 'result_data'
        pi_startdate = 20240611
        pi_enddate = 20240613
        excel_path = excel_path.format(pi_startdate=pi_startdate, pi_enddate=pi_enddate)
        url = url.format(pi_startdate=pi_startdate, pi_enddate=pi_enddate)
        print("url:{}".format(url))
        print("excel_path:{}".format(excel_path))
        response_text = requests.get(url, headers=headers, timeout=(21, 300), verify=False).content.decode("utf8")
        excel_columns, excel_data = json2list(response_text)
        print("=================excel_columns=======================")
        print(excel_columns)
        print("=================excel_data==========================")
        for x in excel_data:
            print(x)
        print("=====================================================")
        # 文件存在,则删除
        if os.path.exists(excel_path):
            os.remove(excel_path)
        # 保存文件
        save_data(excel_data, excel_columns, excel_path, sheet_name)
        print("save_data is end.")
    except Exception as e:
        print("[ERROR]:" + str(e))
        exit(-1)

代码解析

  • 请求头
    构造请求头
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

url = "https://ip/ma/web/trade/dailySummary?startDate={pi_startdate}&endDate={pi_enddate}"
headers = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0",
}
  • 数据保存到excel
    如果excel已经存在,那么则会将数据追加到excel中
def save_data(data, columns, excel_path, sheet_name):
    df = pd.DataFrame(data, columns=columns)
    if not os.path.exists(excel_path):
        df.to_excel(excel_path, sheet_name=sheet_name, index=False)
    else:
        with pd.ExcelWriter(excel_path, engine='openpyxl', mode='a') as writer:
            df.to_excel(writer, sheet_name=sheet_name, index=False)
  • 解析json数据获取字段名称以及对应的数据list列表
def json2list(response_text):
    # 把json数据转化为python用的类型
    json_dict = json.loads(response_text)
    src_total = json_dict["total"]
    print("src_total: {}".format(src_total))
    items = json_dict["items"]
    excel_columns = ['summaryDate',
                     'summaryType',
                     'workday',
                     'newCustNum',
                     'haveCustNum',
                     'newAccountNum',
                     'haveAccountNum',
                     'totalShare',
                     'netCash',
                     'yield'
                     ]
    excel_data = []
    # 使用XPath定位元素并打印内容
    for item in items:
        excel_row_data = []
        for column_index in range(len(excel_columns)):
            data = str(item[excel_columns[column_index]])
            if excel_columns[column_index] == 'workday':
                data = str(0 if data == "False" else 1)
            excel_row_data.append(data)
        excel_data.append(excel_row_data)
    trg_total = len(excel_data)
    # 稽核
    print("trg_total: {}".format(trg_total))
    vn_biasval = trg_total - src_total
    if vn_biasval != 0:
        print("This audit-rule is not passed,diff: {}".format(vn_biasval))
        exit(-1)
    else:
        print("This audit-rule is passed,diff: {}".format(vn_biasval))
    return excel_columns, excel_data
  • 测试方法入口
if __name__ == '__main__':

测试结果

会生成ylb_dailySummary_20240611_20240613.xlsx文件
result_data

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

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

相关文章

C#桌面应用制作计算器

C#桌面应用制作简易计算器,可实现数字之间的加减乘除、AC按键清屏、Del按键清除末尾数字、/-按键取数字相反数、%按键使数字缩小100倍、按键显示运算结果等...... 页面实现效果 功能实现 布局 计算器主体使用Panel容器,然后将button控件排列放置Pane…

谷歌推出设备内置人工智能,实时向手机用户发出诈骗电话警报

Google 宣布推出适用于 Android 的新安全功能,可实时防御诈骗和有害应用。 这些功能由先进的设备内置 AI 提供支持,可在不损害隐私的情况下增强用户安全性。 这些新的安全功能首先在 Pixel 上推出,并将很快在更多 Android 设备上推出。 诈…

HarmonyOS ArkTs 解决流式传输编码问题

工作日志 日期:2024-11-15 标题:HarmonyOS ArkTs 解决流式传输编码问题 问题描述 问题:在处理流式数据的 HTTP 请求时,服务器返回的数据存在编码问题,导致数据无法正确地解码为字符串。部分数据在解码后出现了乱码…

MySQL数据库最大连接数查询及修改

MySQL数据库最大连接数查询及修改 1. 客户端连接数超出异常案例 Navicat连接异常信息如下: 2. 查看MySQL最大客户端连接数 通过mysql client命令登录MySQL数据库(登录用户不受限制,既可以是 root管理员用户,也可以是常规用户&a…

使用Wireshark获取USB HID(Human Interface Device)报告描述符

使用Wireshark选择需要获取的USB进行抓取数据,找到设备(host)接收信息的数据 第二栏出现hid报告,右击选择复制流 将复制的内容粘贴到USB标准请求及描述符在线分析工具 - USB中文网 进行解析 以图中获取手写板的数据为例&#xff…

TofuAI处理BT1120时序视频要求

时序要求 BT.1120视频用于1920x108030Hz数字视频输入。具体时序必须严格按照说明。BT.1120输入电平为1.8V。 BT1120数字视频采用YCbCr彩色格式输出,串行数据位宽为16bit,亮度在 高8bit,色度在低8bit,亮度和色度在同一个时钟周期输…

聊天服务器(8)用户登录业务

目录 登录状态业务层代码数据模型层代码记录用户的连接信息以及线程安全问题客户端异常退出业务 登录状态 登录且状态变为online 业务层代码 #include "chatservice.hpp" #include "public.hpp" #include <string> #include <muduo/base/Loggi…

通用定时器---输出比较功能

目录 一、概念 二、输出比较的8种模式 三、输出比较输出PWM波形的基本结构 配置步骤 四、示例代码 一、概念 OC&#xff08;OutPut Compare&#xff09;输出比较。输出比较可以通过比较CNT与CCR寄存器的关系&#xff0c;来对输出电平进行置1/置0/翻转的操作&#xff0c;可…

Wireshark中的length栏位

注&#xff1a;Ethernet II的最小data length为46&#xff0c;如果小于&#xff0c;会补全到46. 1.指定网卡抓取的&#xff0c;链路为ethernet。 IPv4 Ethernet II 长度为 14 bytes - L1ipv4 header中的length包括header和payload的总长度 - L2wireshark中length表示抓取的pac…

spring boot整合https协议

整体目录 1. 生成SSL证书 首先&#xff0c;使用keytool生成一个自签名证书。打开命令行工具并运行以下命令&#xff1a; keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这将创建一个名为keystore.jks的文件&#xf…

ceph的集群管理

0 环境说明 ip地址主机名额外硬盘是否加入ceph集群10.0.0.141ceph141sdb 300G&#xff0c;sdc 500G是10.0.0.142ceph142sdb 300G&#xff0c;sdc 500G, sdd 1000G否10.0.0.143ceph143sdb 300G&#xff0c;sdc 500G否 在上一篇文章中&#xff0c;已经成功地初始化了一个ceph管…

C++(Qt)软件调试---内存泄漏分析工具MTuner (25)

C(Qt)软件调试—内存泄漏分析工具MTuner &#xff08;25&#xff09; 文章目录 C(Qt)软件调试---内存泄漏分析工具MTuner &#xff08;25&#xff09;[toc]1、概述&#x1f41c;2、下载MTuner&#x1fab2;3、使用MTuner分析qt程序内存泄漏&#x1f9a7;4、相关地址&#x1f41…

CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集

摘要 我们介绍了 CCI3.0-HQ&#xff0c;它是中文语料库互联网 3.0&#xff08;CCI3.0&#xff09;的一个高质量500GB子集&#xff0c;采用新颖的两阶段混合过滤管道开发&#xff0c;显著提高了数据质量。为了评估其有效性&#xff0c;我们在不同数据集的100B tokens上从头开始…

LC12:双指针

文章目录 125. 验证回文串 本专栏记录以后刷题碰到的有关双指针的题目。 125. 验证回文串 题目链接&#xff1a;125. 验证回文串 这是一个简单题目&#xff0c;但条件判断自己写的时候写的过于繁杂。后面参考别人写的代码&#xff0c;首先先将字符串s利用s.toLowerCase()将其…

AI 写作(九)实战项目二:智能新闻报道(9/10)

一、项目概述 在当今信息爆炸的时代&#xff0c;新闻传播行业正面临着前所未有的挑战与机遇。随着科技的飞速发展&#xff0c;人们获取信息的渠道日益多样化&#xff0c;对新闻的时效性、准确性和个性化需求也不断提高。在这样的背景下&#xff0c;AI 写作在智能新闻报道中的重…

星际流浪的大模型

种子世界还在太空漫游&#xff0c;航线上捡到一个铁盒子&#xff0c;那是一块硬盘&#xff0c;古老的东西。 长老就安排歌者&#xff0c;你去研究&#xff0c;查查硬盘的来源坐标。 费好大劲&#xff0c;歌者把硬盘中的程序和数据激活&#xff0c;运行了起来。 很有意思&#x…

HarmonyOs DevEco Studio小技巧31--画布组件Canvas

那天我们用画布实现了文字颜色的渐变&#xff0c;实际上画布还有很多好玩的功能&#xff0c;接下来让我们一起试一下画布怎么玩 Canvas 提供画布组件&#xff0c;用于自定义绘制图形。 接口 Canvas Canvas(context?: CanvasRenderingContext2D | DrawingRenderingContext…

C语言.冒泡排序的练习

题目&#xff1a; 1.用C语言编程&#xff0c;用冒泡排序将一个元素个数为20&#xff0c;的一维数组&#xff0c;由大到小的降序。 分析&#xff1a;1.首先创建一个数组&#xff0c;元素个数为20. 2.其次是按降序排列。 3.最后用冒泡排序。 运行代码&#xff1a; #include&l…

RT-DETR融合GhostModel V3及相关改进思路

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《GhostNetV3: Exploring the Training Strategies for Compact Models》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/pdf/2404.11202v1 代码链接&#xff1a;https:…

基于yolov8、yolov5的鸟类分类系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…