使用 python代码下载蓝海密剑账户各年份数据

查看 42|回复 3
作者:healwilson   
目标网址:https://www.lhmj.org/
使用ai工具辅助编写,具体代码如下:
[Python] 纯文本查看 复制代码import requests
import pandas as pd
from datetime import datetime
import urllib3
import tkinter as tk
from tkinter import simpledialog
import os
import time
# 禁用SSL警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 创建一个弹窗获取用户输入的uid
def get_uid():
    # 创建Tkinter根窗口
    root = tk.Tk()
    root.geometry("340x170")  # 设置弹窗窗口大小
    root.withdraw()  # 隐藏主窗口
    uid = simpledialog.askstring("输入UID", "请输入UID:", parent=root)
    return uid
# 获取用户输入的uid
uid = get_uid()
# 定义获取数据的函数
def get_data(url, sheet_name, writer):
    response = requests.get(url, verify=False)
    if response.status_code == 200:
        try:
            data = response.json()  # 尝试解析为JSON
            # 检查返回的code是否为0
            if data.get("code") == 0:
                print(f"跳过工作表 '{sheet_name}',因为返回的 code 为 0")
                return
            # 确保数据格式为字典
            if isinstance(data, dict) and "data" in data:
                if not data["data"]:  # 检查data是否为空
                    print(f"{sheet_name} 无数据,跳过")
                    return
                if "dateList" in data["data"]:
                    datelist = data["data"]["dateList"]
                    netValueList = data["data"]["netValueList"]
                    positionStatusList = data["data"]["positionStatusList"]
                    df = pd.DataFrame({
                        "时间": datelist,
                        "净值": netValueList,
                        "仓位": positionStatusList
                    })
                    # 写入工作表
                    df.to_excel(writer, sheet_name=sheet_name, index=False)
                    print(f"{sheet_name} 数据已成功导出到工作表 '{sheet_name}'")
                else:
                    print(f"{sheet_name} 无数据,跳过")
            else:
                print(f"数据格式不正确或为空,不能导出到工作表 '{sheet_name}'")
        except ValueError:
            print(f"请求返回的内容不是有效的 JSON 格式,跳过工作表 '{sheet_name}'")
        except Exception as ex:
            print(f"处理请求时发生错误: {ex}")
    else:
        print(f"请求失败,状态码: {response.status_code}")
# 设置请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0'
}
# 发送请求获取用户详细信息(以便命名文件)
url0 = f"https://www.lhmj.org/api/public/user/detail.do?id={uid}&userType=1"
response0 = requests.get(url0, verify=False)
# 获取当前脚本所在的文件夹路径
current_folder = os.path.dirname(os.path.abspath(__file__))
# 初始化文件名变量
filename = ""
if response0.status_code == 200:
    data0 = response0.json()
    user_name = data0["data"]["userName"]  # 获取 username
    current_time = datetime.now().strftime("%Y%m%d")  # 格式化为 YYYYMMDD
    filename = os.path.join(current_folder, f"{user_name}_{current_time}.xlsx")  # 更新文件名
    # 创建一个Excel写入器
    with pd.ExcelWriter(filename) as writer:
        # 循环请求从2009年到2023年的数据
        for year in range(1, 16):  # 从1到15对应2009年到2023年
            url = f"https://www.lhmj.org/api/public/prev/detail.do?id={uid}&userType=1&series={year}"
            sheet_name = str(2009 + (year - 1))  # 计算对应的年份(2009, 2010, ..., 2023)
            get_data(url, sheet_name, writer)
        # 添加2024年数据请求
        url_2024 = f"https://www.lhmj.org/api/public/user/detail.do?id={uid}&userType=1"  # 2024年数据链接
        response_2024 = requests.get(url_2024, verify=False)
        # 处理2024年的数据
        if response_2024.status_code == 200:
            data_2024 = response_2024.json()  # 提取JSON数据
            # 检查数据是否为空
            if "data" in data_2024 and data_2024["data"]:
                cws = data_2024["data"]["cws"]
                dwjzs = data_2024["data"]["dwjzs"]
                times = data_2024["data"]["times"]
                # 创建一个DataFrame,并加入header
                df_2024 = pd.DataFrame({
                    "时间": times,    # Header: 时间
                    "净值": dwjzs,    # Header: DWJZ值
                    "仓位": cws       # Header: CWS值
                })
                # 将2024年的数据写入Excel的"2024"工作表
                df_2024.to_excel(writer, sheet_name="2024", index=False)
                print("2024 数据已成功导出到工作表 '2024'")
            else:
                print("2024年无数据,跳过")
        else:
            print("请求失败,状态码:", response_2024.status_code)
else:
    print("请求失败,状态码:", response0.status_code)
if filename:
    print(f"所有数据已成功导出到文件: {filename}")
    time.sleep(5)  # 等待5秒后关闭窗口
使用方法,将网址中对应的UID填入弹窗即可。


image.png (2.72 KB, 下载次数: 0)
下载附件
2024-12-25 13:01 上传

新手学习,如果有更好的方法欢迎各位大神多交流指正。

数据, 跳过

tche   

感谢楼主分享
cyfwapj   

能否取得冠军持仓股票数据?
hbu126   

高手,学习一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部