{ "cells": [ { "cell_type": "code", "execution_count": 53, "id": "d40f14fe", "metadata": {}, "outputs": [], "source": [ "from login_for_cookie import Vc\n", "import requests\n", "import pandas as pd\n", "import re \n", "cookie = Vc()\n", "header = {\"cookie\":cookie}\n", "bank_flow_df = pd.read_clipboard()" ] }, { "cell_type": "code", "execution_count": null, "id": "fa7b13e9", "metadata": {}, "outputs": [], "source": [ "result = []\n", "for idx,row in bank_flow_df.iterrows():\n", " print(idx)\n", " url = \"https://cp.maso.hk/index.php?main=store_trade_finance_management&navlist=finance_list&s_payment_serial_number=%s\"% row[\"确认单号\"]\n", " response = requests.get(url,headers=header)\n", " text = response.text\n", " dfs = pd.read_html(text)\n", " result.append(dfs[1])" ] }, { "cell_type": "code", "execution_count": null, "id": "31a09d55", "metadata": {}, "outputs": [], "source": [ "result" ] }, { "cell_type": "code", "execution_count": 56, "id": "8a60ba2c", "metadata": {}, "outputs": [], "source": [ "result[0]\n", "new_list = []\n", "for df in result:\n", " for idx,row in df.iterrows():\n", " \n", " currency_pattern = re.compile(r\"EUR|USD|GBP|JPY|CNY|AUD|CAD|CHF|DKK|HKD|INR|KRW|MXN|NOK|NZD|RUB|SEK|SGD|THB|TRY|ZAR\")\n", " id = row[0]\n", " currency = re.findall(currency_pattern,row[5])\n", " if len(currency) == 0:\n", " continue\n", " amount = row[6]\n", " detail = row[7]\n", " temp_tuple = (currency[0],amount,detail,id)\n", " new_list.append(temp_tuple)" ] }, { "cell_type": "code", "execution_count": null, "id": "cdf4863b", "metadata": {}, "outputs": [], "source": [ "new_list" ] }, { "cell_type": "code", "execution_count": 58, "id": "dd54eaeb", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "# 正数大概率没有可以处理的包裹\n", "# 初始化结果列表\n", "result_list = []\n", "\n", "for i in new_list:\n", " try:\n", " id = i[3]\n", " currency = i[0]\n", " amount = float(i[1]) \n", " \n", " # 判断收入或支出\n", " if amount > 0:\n", " type = 'income'\n", " else:\n", " type = 'expense'\n", " if i[2] == \"--\":\n", " detail = \"--\"\n", " else:\n", " \n", " text_split = i[2].split()\n", " text_split = text_split[3:]\n", " if len(text_split) > 3:\n", " if text_split[1] == \"备用金\":\n", " temp_dict = [{'支付手续费':text_split[0], '支付平台':text_split[1], '支付平台流水':text_split[2] +text_split[3] }]\n", " else:\n", " num = (len(text_split))//3\n", " temp_dict = []\n", " for j in range(num):\n", " temp_dict.append({'支付手续费':text_split[j*3], '支付平台':text_split[1+j*3], '支付平台流水':text_split[2+j*3] })\n", " else :\n", " temp_dict = [{'支付手续费':text_split[0], '支付平台':text_split[1], '支付平台流水':text_split[2] if len(text_split) > 2 else \"--\"}]\n", " \n", " detail = temp_dict\n", " except Exception as e:\n", " print(e)\n", " # 计算累计总价(假设 total_price 是所有 amount 的累加)\n", " if isinstance(detail,list):\n", " commission = sum(float(item[\"支付手续费\"]) for item in detail)\n", " else:\n", " commission = 0\n", " # 将当前记录添加到结果列表\n", " result_list.append([id,currency, amount, type, detail, commission])\n", "# 最后一次性创建 DataFrame\n", "result_df = pd.DataFrame(result_list, columns=[\"id\",'currency', 'amount', 'type', 'detail', 'commission'])\n", "result_df.to_clipboard()\n", "\n" ] }, { "cell_type": "code", "execution_count": 59, "id": "06552300", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-16659742.720000004 419510.17 3720.1500000000015\n" ] } ], "source": [ "nsum = 0\n", "total_commission = 0\n", "isum = 0\n", "for idx,row in result_df.iterrows():\n", " row\n", " # if i[2] ==\"--\":\n", " # continue\n", " # if \"SAIR\" in str(i[2]):\n", " # print(i)\n", " # continue\n", " if row[\"currency\"] == \"CNY\":\n", " rate = 1\n", " real_rate = 1\n", " if row[\"currency\"] == \"USD\":\n", " rate = 7\n", " real_rate = 7.16\n", " if row[\"currency\"] == \"EUR\":\n", " rate = 8\n", " real_rate = 7.75 \n", " if row[\"currency\"] == \"GBP\":\n", " rate = 9\n", " real_rate = 9.1\n", " if row[\"currency\"] == \"JPY\":\n", " rate = 0.05\n", " real_rate = 0.0485\n", " if row[\"currency\"] == \"AUD\":\n", " rate = 5\n", " real_rate = 4.65\n", " if row[\"currency\"] == \"CAD\":\n", " rate = 5\n", " real_rate = 5.2\n", " if row[\"currency\"] == \"HKD\":\n", " rate = 1\n", " real_rate = 0.92\n", " if row[\"amount\"] > 0:\n", " nprice = row[\"amount\"]*rate\n", " nsum += nprice\n", " if row[\"amount\"] < 0:\n", " isum += row[\"amount\"]*rate\n", " total_commission += row[\"commission\"]*rate\n", "print(isum,nsum,total_commission)" ] }, { "cell_type": "code", "execution_count": 11, "id": "66a844c8", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "id", "rawType": "object", "type": "string" }, { "name": "currency", "rawType": "object", "type": "string" }, { "name": "amount", "rawType": "float64", "type": "float" }, { "name": "type", "rawType": "object", "type": "string" }, { "name": "detail", "rawType": "object", "type": "unknown" }, { "name": "commission", "rawType": "float64", "type": "float" } ], "ref": "26714892-92f0-4782-ae4c-1bb6a2ddf4ae", "rows": [ [ "0", "2539410", "CNY", "-27.37", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506302346671'}]", "0.0" ], [ "1", "2539409", "CNY", "-292.11", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506302346671'}]", "0.0" ], [ "2", "2539408", "CNY", "-8085.36", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506302346671'}]", "0.0" ], [ "3", "2539398", "USD", "-1650.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506302338229'}]", "0.0" ], [ "4", "2539397", "CNY", "-5316.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506302336498'}]", "0.0" ], [ "5", "2539396", "CNY", "-4478.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506302334980'}]", "0.0" ], [ "6", "2537147", "CAD", "-1551.86", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506270507518'}]", "0.0" ], [ "7", "2537146", "CNY", "-12825.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506270500474'}]", "0.0" ], [ "8", "2536341", "USD", "-4930.56", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506269636827'}]", "0.0" ], [ "9", "2534840", "CNY", "1000.0", "income", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258748788'}]", "0.0" ], [ "10", "2534807", "CNY", "-22131.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258705060'}]", "0.0" ], [ "11", "2534806", "CNY", "-1250.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258705057'}]", "0.0" ], [ "12", "2534805", "CNY", "-19200.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258704172'}]", "0.0" ], [ "13", "2534804", "CNY", "-4000.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258704169'}]", "0.0" ], [ "14", "2534803", "CNY", "-8140.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258704169'}]", "0.0" ], [ "15", "2534802", "CNY", "-800.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258704169'}]", "0.0" ], [ "16", "2534801", "CNY", "-22975.5", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258703320'}]", "0.0" ], [ "17", "2534799", "CNY", "-7975.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258703317'}]", "0.0" ], [ "18", "2534796", "CNY", "-2610.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258703314'}]", "0.0" ], [ "19", "2534778", "USD", "-614.59", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258690045'}]", "0.0" ], [ "20", "2534779", "USD", "-2897.2", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506258689049'}]", "0.0" ], [ "21", "2532487", "USD", "-643.2", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506236772001'}]", "0.0" ], [ "22", "2532486", "CAD", "-120.51", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506236767954'}]", "0.0" ], [ "23", "2532482", "CAD", "-2349.83", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506236767954'}]", "0.0" ], [ "24", "2532478", "USD", "-11662.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506236765959'}]", "0.0" ], [ "25", "2532474", "CNY", "-5130.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506236763136'}]", "0.0" ], [ "26", "2532476", "CNY", "-2239.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506236762572'}]", "0.0" ], [ "27", "2529569", "USD", "-1615.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506194219460'}]", "0.0" ], [ "28", "2529568", "USD", "-562.2", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506194218716'}]", "0.0" ], [ "29", "2529533", "USD", "-40.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506194186199'}]", "0.0" ], [ "30", "2529532", "CNY", "-900.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506194184330'}]", "0.0" ], [ "31", "2523479", "USD", "-11772.44", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506172667065'}]", "0.0" ], [ "32", "2523478", "CNY", "-2239.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506172666090'}]", "0.0" ], [ "33", "2523459", "USD", "10000.0", "income", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506172564387'}]", "0.0" ], [ "34", "2520859", "CNY", "-2565.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506140402278'}]", "0.0" ], [ "35", "2517883", "CAD", "-2821.74", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506118309501'}, {'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506064652360'}]", "0.0" ], [ "36", "2517880", "CAD", "-181.44", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506118307332'}]", "0.0" ], [ "37", "2517879", "CAD", "-1065.42", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506118307332'}]", "0.0" ], [ "38", "2517878", "CAD", "-722.05", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506118307332'}]", "0.0" ], [ "39", "2517877", "JPY", "98277.0", "income", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506118305370'}]", "0.0" ], [ "40", "2515282", "CNY", "-6717.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506096502436'}]", "0.0" ], [ "41", "2515283", "CNY", "-189520.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506096502433'}]", "0.0" ], [ "42", "2515260", "USD", "-378.7", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506096432710'}]", "0.0" ], [ "43", "2511413", "USD", "-16740.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506064662557'}]", "0.0" ], [ "44", "2511411", "CNY", "-4680.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506064660973'}]", "0.0" ], [ "45", "2511395", "CAD", "2086.5", "income", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506064652360'}]", "0.0" ], [ "46", "2509570", "CNY", "-5340.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506042925647'}]", "0.0" ], [ "47", "2509569", "CNY", "-4000.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506042925647'}]", "0.0" ], [ "48", "2509568", "CAD", "-2086.5", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506042924138'}]", "0.0" ], [ "49", "2509251", "CNY", "-13694.0", "expense", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '202506042662235'}]", "0.0" ] ], "shape": { "columns": 6, "rows": 250 } }, "text/html": [ "
| \n", " | id | \n", "currency | \n", "amount | \n", "type | \n", "detail | \n", "commission | \n", "
|---|---|---|---|---|---|---|
| 0 | \n", "2539410 | \n", "CNY | \n", "-27.37 | \n", "expense | \n", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '2... | \n", "0.00 | \n", "
| 1 | \n", "2539409 | \n", "CNY | \n", "-292.11 | \n", "expense | \n", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '2... | \n", "0.00 | \n", "
| 2 | \n", "2539408 | \n", "CNY | \n", "-8085.36 | \n", "expense | \n", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '2... | \n", "0.00 | \n", "
| 3 | \n", "2539398 | \n", "USD | \n", "-1650.00 | \n", "expense | \n", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '2... | \n", "0.00 | \n", "
| 4 | \n", "2539397 | \n", "CNY | \n", "-5316.00 | \n", "expense | \n", "[{'支付手续费': '0.00', '支付平台': 'LLP', '支付平台流水': '2... | \n", "0.00 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 245 | \n", "2541577 | \n", "USD | \n", "-41.50 | \n", "expense | \n", "[{'支付手续费': '0.00', '支付平台': 'Airwallex', '支付平台流... | \n", "0.00 | \n", "
| 246 | \n", "2541576 | \n", "USD | \n", "-307.49 | \n", "expense | \n", "[{'支付手续费': '0.01', '支付平台': 'Airwallex', '支付平台流... | \n", "0.01 | \n", "
| 247 | \n", "2541575 | \n", "USD | \n", "-2554.52 | \n", "expense | \n", "[{'支付手续费': '0.05', '支付平台': 'Airwallex', '支付平台流... | \n", "0.05 | \n", "
| 248 | \n", "2541563 | \n", "USD | \n", "32.26 | \n", "income | \n", "[{'支付手续费': '0.00', '支付平台': 'Airwallex', '支付平台流... | \n", "0.00 | \n", "
| 249 | \n", "2541562 | \n", "USD | \n", "-50806.55 | \n", "expense | \n", "[{'支付手续费': '0.95', '支付平台': 'Airwallex', '支付平台流... | \n", "0.95 | \n", "
250 rows × 6 columns
\n", "