Files
F6--/张阳脚本/竞品系统数据导出/神汽链导出.ipynb
T
2026-04-18 09:22:23 +08:00

1240 lines
51 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"id": "a84cbd49a7363225",
"metadata": {
"ExecuteTime": {
"end_time": "2026-04-13T01:20:15.660532200Z",
"start_time": "2026-04-13T01:12:52.240869600Z"
}
},
"source": [
"import requests\n",
"from tqdm import tqdm\n",
"import pandas as pd\n",
"from datetime import datetime, timedelta\n",
"import time\n",
"import os\n",
"\n",
"# 配置部分\n",
"cookies = {\n",
" 'JSESSIONID': 'YTM2MGVhN2QtMzBjOS00Mjc0LTg4Y2ItNjgyZmM2NmVmOTY3',\n",
"}\n",
"\n",
"headers = {\n",
" 'Accept': 'application/json, text/plain, */*',\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",
" 'Content-Type': 'application/json;charset=UTF-8',\n",
" 'Origin': 'https://www.sqzone.com',\n",
" 'Referer': 'https://www.sqzone.com/launa/web/dc/turnover',\n",
" 'Sec-Fetch-Dest': 'empty',\n",
" 'Sec-Fetch-Mode': 'cors',\n",
" 'Sec-Fetch-Site': 'same-origin',\n",
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',\n",
" 'X-Requested-With': 'XMLHttpRequest',\n",
" 'appName': 'SQLINK',\n",
" 'sec-ch-ua': '\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Microsoft Edge\";v=\"146\"',\n",
" 'sec-ch-ua-mobile': '?0',\n",
" 'sec-ch-ua-platform': '\"Windows\"',\n",
" # 'Cookie': 'JSESSIONID=YTM2MGVhN2QtMzBjOS00Mjc0LTg4Y2ItNjgyZmM2NmVmOTY3',\n",
"}\n",
"\n",
"\n",
"\n",
"URL = 'https://www.sqzone.com/launa/pc/dataCenter/queryShopTurnoverInfo'\n",
"OUTPUT_FILE = r'D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据.xlsx'\n",
"\n",
"# 确保输出目录存在\n",
"os.makedirs(os.path.dirname(OUTPUT_FILE), exist_ok=True)\n",
"\n",
"all_data = []\n",
"\n",
"def get_month_range(start_year, start_month, end_year, end_month):\n",
" dates = []\n",
" current = datetime(start_year, start_month, 1)\n",
" end = datetime(end_year, end_month, 1)\n",
" while current <= end:\n",
" next_month = (current.replace(day=28) + timedelta(days=4)).replace(day=1)\n",
" last_day = next_month - timedelta(days=1)\n",
" dates.append((\n",
" current.strftime('%Y-%m-%d'),\n",
" last_day.strftime('%Y-%m-%d')\n",
" ))\n",
" current = next_month\n",
" return dates\n",
"\n",
"def fetch_page_with_retry(start_date, end_date, page_num, max_retries=3):\n",
" \"\"\"带重试机制的单页请求函数\"\"\"\n",
" json_data = {\n",
" 'keyword': '',\n",
" 'pageSize': 50,\n",
" 'curPage': page_num,\n",
" 'shopId': '',\n",
" 'payId': [],\n",
" 'payStatus': '',\n",
" 'startTime': start_date,\n",
" 'endTime': end_date,\n",
" }\n",
"\n",
" for attempt in range(max_retries):\n",
" try:\n",
" response = requests.post(\n",
" URL,\n",
" cookies=cookies,\n",
" headers=headers,\n",
" json=json_data,\n",
" timeout=15 # 增加超时设置,防止无限等待\n",
" )\n",
"\n",
" # 检查状态码\n",
" if response.status_code == 200:\n",
" res_json = response.json()\n",
" # 检查业务逻辑是否成功 (假设成功时有 'data' 字段)\n",
" if res_json.get('data'):\n",
" return res_json['data'].get('contents', [])\n",
" else:\n",
" # 可能是业务错误,打印并视为本次失败,尝试重试\n",
" print(f\"第{page_num}页业务返回异常: {res_json}\")\n",
" else:\n",
" print(f\"第{page_num}页HTTP错误: {response.status_code}\")\n",
"\n",
" except requests.exceptions.RequestException as e:\n",
" print(f\"第{page_num}页网络请求失败 (尝试 {attempt+1}/{max_retries}): {e}\")\n",
"\n",
" # 如果失败,等待一段时间后重试 (指数退避)\n",
" if attempt < max_retries - 1:\n",
" wait_time = (attempt + 1) * 2 # 2秒, 4秒, 6秒...\n",
" print(f\" -> 等待 {wait_time} 秒后重试...\")\n",
" time.sleep(wait_time)\n",
"\n",
" # 所有重试都失败\n",
" return None\n",
"\n",
"# 生成日期范围\n",
"month_ranges = get_month_range(2020, 11, 2026, 3)\n",
"\n",
"for start_date, end_date in tqdm(month_ranges, desc=\"正在抓取数据\"):\n",
" page = 1\n",
" while True:\n",
" data_list = fetch_page_with_retry(start_date, end_date, page, max_retries=3)\n",
"\n",
" # 如果重试多次后仍然失败 (返回 None),可以选择跳过该页或终止\n",
" if data_list is None:\n",
" print(f\"⚠️ 严重警告: {start_date}-{end_date} 第{page}页 多次重试失败,跳过该页继续下一页。\")\n",
" # 这里选择 break 跳出当前月份的循环,或者可以根据需求选择 continue 尝试下一页\n",
" # 为了数据安全,通常建议记录日志后 break 当前月份,防止数据错乱\n",
" break\n",
"\n",
" if not data_list:\n",
" # 正常结束:没有更多数据\n",
" # print(f\"{start_date}-{end_date} 数据已爬取完毕\")\n",
" break\n",
"\n",
" # 处理数据\n",
" for data in data_list:\n",
" # 安全获取 partsViews,防止某些记录没有该字段\n",
" parts = data.get('partsViews', [])\n",
" customer_info = {k: v for k, v in data.items() if k != 'partsViews'}\n",
"\n",
" if parts:\n",
" for part in parts:\n",
" record = {**customer_info, **part}\n",
" all_data.append(record)\n",
" else:\n",
" # 如果没有配件视图,是否也要保留主记录?视业务需求而定\n",
" # 这里假设必须有配件信息才保留,如果需要保留主记录请取消下面注释\n",
" # all_data.append(customer_info)\n",
" pass\n",
"\n",
" page += 1\n",
" # 正常翻页等待\n",
" time.sleep(1)\n",
"\n",
" # 可选:每完成一个月保存一次,防止程序运行几天后崩溃导致前功尽弃\n",
" if len(all_data) > 0 and len(all_data) % 5000 == 0:\n",
" temp_df = pd.DataFrame(all_data)\n",
" temp_df.to_excel(OUTPUT_FILE.replace('.xlsx', '_temp.xlsx'), index=False)\n",
" print(\"临时保存已完成\")\n",
"\n",
"# 最终保存\n",
"if all_data:\n",
" ndf = pd.DataFrame(all_data)\n",
" ndf.to_excel(OUTPUT_FILE, index=False)\n",
" print(f\"✅ 全部完成!共抓取 {len(all_data)} 条数据,已保存至 {OUTPUT_FILE}\")\n",
"else:\n",
" print(\"❌ 未抓取到任何数据。\")"
],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 20%|██ | 13/65 [01:10<08:16, 9.54s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 22%|██▏ | 14/65 [01:17<07:32, 8.86s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2021-12-01-2021-12-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 23%|██▎ | 15/65 [01:24<06:57, 8.35s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-01-01-2022-01-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 25%|██▍ | 16/65 [01:31<06:31, 7.98s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-02-01-2022-02-28 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 26%|██▌ | 17/65 [01:38<06:09, 7.71s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-03-01-2022-03-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 28%|██▊ | 18/65 [01:46<05:57, 7.60s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-04-01-2022-04-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 29%|██▉ | 19/65 [01:53<05:43, 7.47s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-05-01-2022-05-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 31%|███ | 20/65 [02:00<05:32, 7.38s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-06-01-2022-06-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 32%|███▏ | 21/65 [02:07<05:21, 7.30s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-07-01-2022-07-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 34%|███▍ | 22/65 [02:14<05:12, 7.26s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-08-01-2022-08-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 35%|███▌ | 23/65 [02:21<05:02, 7.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-09-01-2022-09-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 37%|███▋ | 24/65 [02:28<04:54, 7.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-10-01-2022-10-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 38%|███▊ | 25/65 [02:36<04:47, 7.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-11-01-2022-11-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 40%|████ | 26/65 [02:43<04:40, 7.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2022-12-01-2022-12-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 42%|████▏ | 27/65 [02:50<04:33, 7.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-01-01-2023-01-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 43%|████▎ | 28/65 [02:57<04:25, 7.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-02-01-2023-02-28 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 45%|████▍ | 29/65 [03:04<04:17, 7.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-03-01-2023-03-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 46%|████▌ | 30/65 [03:11<04:09, 7.14s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-04-01-2023-04-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 48%|████▊ | 31/65 [03:19<04:02, 7.13s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-05-01-2023-05-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 49%|████▉ | 32/65 [03:26<03:56, 7.17s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-06-01-2023-06-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 51%|█████ | 33/65 [03:33<03:51, 7.23s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-07-01-2023-07-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 52%|█████▏ | 34/65 [03:40<03:43, 7.20s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-08-01-2023-08-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 54%|█████▍ | 35/65 [03:47<03:35, 7.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-09-01-2023-09-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 55%|█████▌ | 36/65 [03:55<03:29, 7.23s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-10-01-2023-10-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 57%|█████▋ | 37/65 [04:02<03:21, 7.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-11-01-2023-11-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 58%|█████▊ | 38/65 [04:09<03:13, 7.17s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2023-12-01-2023-12-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 60%|██████ | 39/65 [04:16<03:06, 7.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-01-01-2024-01-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 62%|██████▏ | 40/65 [04:23<03:00, 7.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-02-01-2024-02-29 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 63%|██████▎ | 41/65 [04:31<02:52, 7.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-03-01-2024-03-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 65%|██████▍ | 42/65 [04:38<02:44, 7.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-04-01-2024-04-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 66%|██████▌ | 43/65 [04:45<02:37, 7.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-05-01-2024-05-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 68%|██████▊ | 44/65 [04:52<02:30, 7.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-06-01-2024-06-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 69%|██████▉ | 45/65 [04:59<02:23, 7.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-07-01-2024-07-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 71%|███████ | 46/65 [05:07<02:16, 7.20s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-08-01-2024-08-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 72%|███████▏ | 47/65 [05:14<02:09, 7.17s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-09-01-2024-09-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 74%|███████▍ | 48/65 [05:21<02:01, 7.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-10-01-2024-10-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 75%|███████▌ | 49/65 [05:28<01:54, 7.14s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-11-01-2024-11-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 77%|███████▋ | 50/65 [05:35<01:47, 7.17s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2024-12-01-2024-12-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 78%|███████▊ | 51/65 [05:42<01:40, 7.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-01-01-2025-01-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 80%|████████ | 52/65 [05:49<01:33, 7.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-02-01-2025-02-28 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 82%|████████▏ | 53/65 [05:57<01:25, 7.14s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-03-01-2025-03-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 83%|████████▎ | 54/65 [06:04<01:18, 7.13s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-04-01-2025-04-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 85%|████████▍ | 55/65 [06:11<01:11, 7.13s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-05-01-2025-05-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 86%|████████▌ | 56/65 [06:18<01:04, 7.12s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-06-01-2025-06-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 88%|████████▊ | 57/65 [06:25<00:57, 7.14s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-07-01-2025-07-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 89%|████████▉ | 58/65 [06:32<00:50, 7.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-08-01-2025-08-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 91%|█████████ | 59/65 [06:40<00:43, 7.19s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-09-01-2025-09-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 92%|█████████▏| 60/65 [06:47<00:35, 7.17s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-10-01-2025-10-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 94%|█████████▍| 61/65 [06:54<00:28, 7.17s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-11-01-2025-11-30 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 95%|█████████▌| 62/65 [07:01<00:21, 7.13s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2025-12-01-2025-12-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 97%|█████████▋| 63/65 [07:08<00:14, 7.11s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2026-01-01-2026-01-31 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 98%|█████████▊| 64/65 [07:15<00:07, 7.10s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2026-02-01-2026-02-28 第1页 多次重试失败,跳过该页继续下一页。\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 2 秒后重试...\n",
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
" -> 等待 4 秒后重试...\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"正在抓取数据: 100%|██████████| 65/65 [07:22<00:00, 6.81s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"第1页业务返回异常: {'errorMsg': '用户未登录,请先登录!', 'code': '-1302', 'success': False}\n",
"⚠️ 严重警告: 2026-03-01-2026-03-31 第1页 多次重试失败,跳过该页继续下一页。\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"✅ 全部完成!共抓取 830 条数据,已保存至 D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据.xlsx\n"
]
}
],
"execution_count": 2
},
{
"cell_type": "code",
"execution_count": 3,
"id": "d2abfb70a61d82a0",
"metadata": {
"ExecuteTime": {
"end_time": "2026-03-31T03:05:38.539504Z",
"start_time": "2026-03-31T03:05:27.394303900Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"✅ 全部完成!共抓取 15906 条数据,已保存至 D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\神汽链10年历史数据1.xlsx\n"
]
}
],
"source": [
"# 最终保存\n",
"if all_data:\n",
" ndf = pd.DataFrame(all_data)\n",
" ndf.to_excel(OUTPUT_FILE, index=False)\n",
" print(f\"✅ 全部完成!共抓取 {len(all_data)} 条数据,已保存至 {OUTPUT_FILE}\")\n",
"else:\n",
" print(\"❌ 未抓取到任何数据。\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "F6+宜搭+其它",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}