1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import requests import json from collections import defaultdict import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] plt.rcParams["axes.unicode_minus"]=False
account = input("请输入你的账户号(学号/工号):") JSESSIONID = input("请输入你的JSESSIONID:")
url_template = "http://ecard.m.hust.edu.cn/wechat-web/QueryController/select.html?jsoncallback=jQuery21402777983544074327_1735390337447&account={account}&curpage={page}&dateStatus={date}&typeStatus=2&_=1735390337442" cookie = { "JSESSIONID": JSESSIONID, } data_list = []
def get_data(account, date, url_template, cookie): global data_list curpage = 1 response = requests.get(url_template.format(account = account, page=curpage,date = date), cookies=cookie) response_text = response.text.strip("callJson(").rstrip(")") data = json.loads(response_text)
if data['retcode'] == '0': while True: for item in data['consume']: data_list.append({ 'mercname': item['mercname'], 'tranamt': item['tranamt'] }) if int(data['nextpage']) <= curpage: break curpage = int(data['nextpage']) response = requests.get(url_template.format(account=account, page=curpage, date = date), cookies=cookie) response_text = response.text.strip("callJson(").rstrip(")") data = json.loads(response_text) if data['retcode'] != '0': print("Failed to retrieve data:", data['errmsg']) break
date_list = ['2024-01-01','2023-02-01','2024-03-01','2024-04-01','2024-05-01','2024-06-01','2024-07-01','2024-08-01','2024-09-01','2024-10-01','2024-11-01','2024-12-01']
for date in date_list: get_data(account, date, url_template, cookie)
tranamt_sum = defaultdict(float)
for item in data_list: tranamt_sum[item['mercname']] += int(item['tranamt'])/100
sorted_tranamt = sorted(tranamt_sum.items(), key=lambda x: x[1], reverse=True) mercnames, amounts = zip(*sorted_tranamt)
plt.figure(figsize=(16, 9)) plt.bar(mercnames, amounts, color='skyblue') plt.xlabel('商户名称') plt.ylabel('总交易金额') plt.title('各商户总交易金额') plt.xticks(rotation=45, ha='right') plt.tight_layout() plt.show()
|