305 lines
13 KiB
Plaintext
305 lines
13 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"id": "initial_id",
|
||
"metadata": {
|
||
"collapsed": true,
|
||
"ExecuteTime": {
|
||
"end_time": "2025-06-26T05:39:09.305879Z",
|
||
"start_time": "2025-06-26T05:39:09.248395Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"import requests\n",
|
||
"import pandas as pd\n",
|
||
"from retrying import retry\n",
|
||
"from tqdm import tqdm\n",
|
||
"\n",
|
||
"# 设置重试策略\n",
|
||
"@retry(stop_max_attempt_number=3, wait_fixed=2000) # 最多重试3次,每次间隔2秒\n",
|
||
"def fetch_url(url, params=None):\n",
|
||
" response = requests.get(url, headers=headers, params=params, timeout=10)\n",
|
||
" response.raise_for_status() # 抛出 HTTP 错误(如 500)\n",
|
||
" return response.json()\n",
|
||
"\n",
|
||
"headers = {\n",
|
||
" 'Accept': 'application/json',\n",
|
||
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
|
||
" 'Connection': 'keep-alive',\n",
|
||
" 'Origin': 'https://cms.carisok.com',\n",
|
||
" 'Referer': 'https://cms.carisok.com/',\n",
|
||
" 'Sec-Fetch-Dest': 'empty',\n",
|
||
" 'Sec-Fetch-Mode': 'cors',\n",
|
||
" 'Sec-Fetch-Site': 'same-site',\n",
|
||
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0',\n",
|
||
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"137\", \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"',\n",
|
||
" 'sec-ch-ua-mobile': '?0',\n",
|
||
" 'sec-ch-ua-platform': '\"Windows\"',\n",
|
||
"}\n",
|
||
"\n",
|
||
"car_data = []\n",
|
||
"operate_data = []\n",
|
||
"order_data = []\n",
|
||
"server_data = []\n",
|
||
"settlement_data = []\n",
|
||
"\n",
|
||
"for i in tqdm(range(1, 350)):\n",
|
||
" list_url = f'https://ssapp-api.carisok.com/pc.php/PcPickcarOrder/lists?name=&mobile=&orderState=0&workState=0&businessType=0&page={i}&pagesize=20&carNo=&orderNo=&operate_count=&companyName=&startDate&endDate&api_version=4.00&__trace_id=6f72ab8e-f569-4b5d-aa7b-c890eec6756d-store&token=4d62a33aa979d6d242d6b0198afbbf27'\n",
|
||
"\n",
|
||
" response = fetch_url(list_url)\n",
|
||
"\n",
|
||
" history_list = response.get('data').get(\"listData\")\n",
|
||
" \n",
|
||
" for history in history_list:\n",
|
||
" orderId = history.get('orderId')\n",
|
||
"\n",
|
||
" params = {\n",
|
||
" 'orderId': orderId,\n",
|
||
" 'businessType': '1',\n",
|
||
" 'api_version': '4.00',\n",
|
||
" '__trace_id': 'c41f197b-ef5c-4813-8d97-8947f4289243-store',\n",
|
||
" 'token': '4d62a33aa979d6d242d6b0198afbbf27',\n",
|
||
" }\n",
|
||
" response = requests.get('https://ssapp-api.carisok.com/pc.php/GainRecord/get_order_detail', params=params, headers=headers)\n",
|
||
"\n",
|
||
" data = response.json().get('data')\n",
|
||
" \n",
|
||
" carInfo = data.get('carInfo', [])\n",
|
||
" operate = data.get('operate', [])\n",
|
||
" orderInfo = data.get('orderInfo', [])\n",
|
||
" serverInfo = data.get('serverInfo', [])\n",
|
||
" settlementInfo = data.get('settlementInfo', [])\n",
|
||
"\n",
|
||
"\n",
|
||
"\n",
|
||
" if isinstance(carInfo, dict):\n",
|
||
" carInfo[\"orderid\"] = orderId\n",
|
||
" car_data.append(carInfo)\n",
|
||
" elif isinstance(carInfo, list):\n",
|
||
" for item in carInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" car_data.append(item)\n",
|
||
" \n",
|
||
" # 处理 orderInfo(可能是字典或列表)\n",
|
||
" if isinstance(orderInfo, dict):\n",
|
||
" orderInfo[\"orderid\"] = orderId\n",
|
||
" order_data.append(orderInfo)\n",
|
||
" elif isinstance(orderInfo, list):\n",
|
||
" for item in orderInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" order_data.append(item)\n",
|
||
" \n",
|
||
" # 处理 operate(通常是列表,但也可能不是)\n",
|
||
" if isinstance(operate, list):\n",
|
||
" for item in operate:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" operate_data.append(item)\n",
|
||
" \n",
|
||
" # 处理 serverInfo(可能是字典或列表)\n",
|
||
" if isinstance(serverInfo, dict):\n",
|
||
" serverInfo[\"orderid\"] = orderId\n",
|
||
" server_data.append(serverInfo)\n",
|
||
" elif isinstance(serverInfo, list):\n",
|
||
" for item in serverInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" server_data.append(item)\n",
|
||
" \n",
|
||
" # 处理 settlementInfo(可能是字典或列表)\n",
|
||
" if isinstance(settlementInfo, dict):\n",
|
||
" settlementInfo[\"orderid\"] = orderId\n",
|
||
" settlement_data.append(settlementInfo)\n",
|
||
" elif isinstance(settlementInfo, list):\n",
|
||
" for item in settlementInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" settlement_data.append(item)\n",
|
||
" \n",
|
||
" \n",
|
||
"\n",
|
||
"# 写入 CSV 文件\n",
|
||
"df1 = pd.DataFrame(car_data)\n",
|
||
"df2 = pd.DataFrame(operate_data)\n",
|
||
"df3 = pd.DataFrame(order_data)\n",
|
||
"df4 = pd.DataFrame(server_data)\n",
|
||
"df5 = pd.DataFrame(settlement_data)\n",
|
||
"\n",
|
||
"output_path = r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\\\'\n",
|
||
"\n",
|
||
"df1.to_csv(output_path + 'car.csv', index=False)\n",
|
||
"df2.to_csv(output_path + 'operate.csv', index=False)\n",
|
||
"df3.to_csv(output_path + 'order.csv', index=False)\n",
|
||
"df4.to_csv(output_path + 'server.csv', index=False)\n",
|
||
"df5.to_csv(output_path + 'settlement.csv', index=False)\n",
|
||
"\n",
|
||
"print(\"✅ 数据写入完成\")"
|
||
],
|
||
"outputs": [
|
||
{
|
||
"ename": "NameError",
|
||
"evalue": "name 'tqdm' is not defined",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
|
||
"\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)",
|
||
"Cell \u001B[1;32mIn[48], line 33\u001B[0m\n\u001B[0;32m 30\u001B[0m server_data \u001B[38;5;241m=\u001B[39m []\n\u001B[0;32m 31\u001B[0m settlement_data \u001B[38;5;241m=\u001B[39m []\n\u001B[1;32m---> 33\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m i \u001B[38;5;129;01min\u001B[39;00m tqdm(\u001B[38;5;28mrange\u001B[39m(\u001B[38;5;241m1\u001B[39m, \u001B[38;5;241m350\u001B[39m)):\n\u001B[0;32m 34\u001B[0m list_url \u001B[38;5;241m=\u001B[39m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mhttps://ssapp-api.carisok.com/pc.php/PcPickcarOrder/lists?name=&mobile=&orderState=0&workState=0&businessType=0&page=\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mi\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m&pagesize=20&carNo=&orderNo=&operate_count=&companyName=&startDate&endDate&api_version=4.00&__trace_id=6f72ab8e-f569-4b5d-aa7b-c890eec6756d-store&token=4d62a33aa979d6d242d6b0198afbbf27\u001B[39m\u001B[38;5;124m'\u001B[39m\n\u001B[0;32m 36\u001B[0m response \u001B[38;5;241m=\u001B[39m fetch_url(list_url)\n",
|
||
"\u001B[1;31mNameError\u001B[0m: name 'tqdm' is not defined"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 48
|
||
},
|
||
{
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-06-26T05:35:06.024711Z",
|
||
"start_time": "2025-06-26T05:35:05.187886Z"
|
||
}
|
||
},
|
||
"cell_type": "code",
|
||
"source": [
|
||
"import requests\n",
|
||
"\n",
|
||
"headers = {\n",
|
||
" 'Accept': 'application/json',\n",
|
||
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
|
||
" 'Connection': 'keep-alive',\n",
|
||
" 'Origin': 'https://cms.carisok.com',\n",
|
||
" 'Referer': 'https://cms.carisok.com/',\n",
|
||
" 'Sec-Fetch-Dest': 'empty',\n",
|
||
" 'Sec-Fetch-Mode': 'cors',\n",
|
||
" 'Sec-Fetch-Site': 'same-site',\n",
|
||
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0',\n",
|
||
" 'sec-ch-ua': '\"Microsoft Edge\";v=\"137\", \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"',\n",
|
||
" 'sec-ch-ua-mobile': '?0',\n",
|
||
" 'sec-ch-ua-platform': '\"Windows\"',\n",
|
||
"}\n",
|
||
"orderId = '1334846'\n",
|
||
"params = {\n",
|
||
" 'orderId': orderId,\n",
|
||
" 'businessType': '1',\n",
|
||
" 'api_version': '4.00',\n",
|
||
" '__trace_id': 'c41f197b-ef5c-4813-8d97-8947f4289243-store',\n",
|
||
" 'token': '4d62a33aa979d6d242d6b0198afbbf27',\n",
|
||
"}\n",
|
||
"\n",
|
||
"response = requests.get('https://ssapp-api.carisok.com/pc.php/GainRecord/get_order_detail', params=params, headers=headers)\n",
|
||
"\n",
|
||
"data = response.json().get('data')\n",
|
||
"\n",
|
||
"carInfo = data.get('carInfo', {})\n",
|
||
"operate = data.get('operate', [])\n",
|
||
"serverInfo = data.get('serverInfo', [])\n",
|
||
"orderInfo = data.get('orderInfo', {})\n",
|
||
"settlementInfo = data.get('settlementInfo', [])\n",
|
||
"\n",
|
||
"car_data=[]\n",
|
||
"operate_data=[]\n",
|
||
"order_data = []\n",
|
||
"server_data = []\n",
|
||
"settlement_data = []\n",
|
||
"# 处理 carInfo(可能是字典或列表)\n",
|
||
"if isinstance(carInfo, dict):\n",
|
||
" carInfo[\"orderid\"] = orderId\n",
|
||
" car_data.append(carInfo)\n",
|
||
"elif isinstance(carInfo, list):\n",
|
||
" for item in carInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" car_data.append(item)\n",
|
||
"\n",
|
||
"# 处理 orderInfo(可能是字典或列表)\n",
|
||
"if isinstance(orderInfo, dict):\n",
|
||
" orderInfo[\"orderid\"] = orderId\n",
|
||
" order_data.append(orderInfo)\n",
|
||
"elif isinstance(orderInfo, list):\n",
|
||
" for item in orderInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" order_data.append(item)\n",
|
||
"\n",
|
||
"# 处理 operate(通常是列表,但也可能不是)\n",
|
||
"if isinstance(operate, list):\n",
|
||
" for item in operate:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" operate_data.append(item)\n",
|
||
"\n",
|
||
"# 处理 serverInfo(可能是字典或列表)\n",
|
||
"if isinstance(serverInfo, dict):\n",
|
||
" serverInfo[\"orderid\"] = orderId\n",
|
||
" server_data.append(serverInfo)\n",
|
||
"elif isinstance(serverInfo, list):\n",
|
||
" for item in serverInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" server_data.append(item)\n",
|
||
"\n",
|
||
"# 处理 settlementInfo(可能是字典或列表)\n",
|
||
"if isinstance(settlementInfo, dict):\n",
|
||
" settlementInfo[\"orderid\"] = orderId\n",
|
||
" settlement_data.append(settlementInfo)\n",
|
||
"elif isinstance(settlementInfo, list):\n",
|
||
" for item in settlementInfo:\n",
|
||
" if isinstance(item, dict):\n",
|
||
" item[\"orderid\"] = orderId\n",
|
||
" settlement_data.append(item)\n",
|
||
" \n",
|
||
" \n",
|
||
" \n",
|
||
" \n",
|
||
"\n",
|
||
"\n",
|
||
"df1 = pd.DataFrame(car_data)\n",
|
||
"df2 = pd.DataFrame(operate_data)\n",
|
||
"df3 = pd.DataFrame(order_data)\n",
|
||
"df4 = pd.DataFrame(server_data)\n",
|
||
"df5 = pd.DataFrame(settlement_data)\n",
|
||
"\n",
|
||
"df1.to_csv(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\car.csv', index=False)\n",
|
||
"df2.to_csv(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\operate.csv', index=False)\n",
|
||
"df3.to_csv(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\order.csv', index=False)\n",
|
||
"df4.to_csv(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\server.csv', index=False)\n",
|
||
"df5.to_csv(r'D:\\Idea Project\\F6+宜搭+其它(1)\\new\\文件输出\\settlement.csv', index=False)\n",
|
||
"print(\"数据写入完成\")"
|
||
],
|
||
"id": "e1ca5734b455a269",
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"数据写入完成\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 42
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 2
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython2",
|
||
"version": "2.7.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|