目标网址: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填入弹窗即可。
新手学习,如果有更好的方法欢迎各位大神多交流指正。
|