|
@@ -2,9 +2,9 @@
|
|
|
# Author : Charley
|
|
# Author : Charley
|
|
|
# Python : 3.10.8
|
|
# Python : 3.10.8
|
|
|
# Date : 2025/6/9 15:56
|
|
# Date : 2025/6/9 15:56
|
|
|
|
|
+import sys
|
|
|
import time
|
|
import time
|
|
|
import json
|
|
import json
|
|
|
-import inspect
|
|
|
|
|
import requests
|
|
import requests
|
|
|
import schedule
|
|
import schedule
|
|
|
import hashlib
|
|
import hashlib
|
|
@@ -130,7 +130,7 @@ def parse_data(resp_json, sql_pool):
|
|
|
order_no = resp_json.get('obj_order_rating_goods', {}).get('order_no')
|
|
order_no = resp_json.get('obj_order_rating_goods', {}).get('order_no')
|
|
|
tag_no = resp_json.get('obj_order_rating_goods', {}).get('tag_no') # 标签号/查询的号码
|
|
tag_no = resp_json.get('obj_order_rating_goods', {}).get('tag_no') # 标签号/查询的号码
|
|
|
|
|
|
|
|
- images = resp_json.get('obj_order_rating_goods', []).get('images')
|
|
|
|
|
|
|
+ images = resp_json.get('obj_order_rating_goods', {}).get('images')
|
|
|
card_create_time = resp_json.get('obj_order_rating_goods', {}).get('create_time')
|
|
card_create_time = resp_json.get('obj_order_rating_goods', {}).get('create_time')
|
|
|
card_update_time = resp_json.get('obj_order_rating_goods', {}).get('update_time')
|
|
card_update_time = resp_json.get('obj_order_rating_goods', {}).get('update_time')
|
|
|
score = resp_json.get('obj_order_rating_goods', {}).get('score') # 中检评分
|
|
score = resp_json.get('obj_order_rating_goods', {}).get('score') # 中检评分
|
|
@@ -192,7 +192,7 @@ def loop_rating_no(log, sql_pool, sql_ra_no_list):
|
|
|
log.warning(f"other warning, please check ......................................")
|
|
log.warning(f"other warning, please check ......................................")
|
|
|
sql_pool.update_one('update zhongjian_task set state = 3 where tag_no = %s', (rating_no_,))
|
|
sql_pool.update_one('update zhongjian_task set state = 3 where tag_no = %s', (rating_no_,))
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
|
- log.warning(f"{inspect.currentframe().f_code.co_name} error: {e}")
|
|
|
|
|
|
|
+ log.warning(f"{sys._getframe().f_code.co_name} error: {e}")
|
|
|
sql_pool.update_one('update zhongjian_task set state = 3 where tag_no = %s', (rating_no_,))
|
|
sql_pool.update_one('update zhongjian_task set state = 3 where tag_no = %s', (rating_no_,))
|
|
|
continue
|
|
continue
|
|
|
|
|
|
|
@@ -204,34 +204,37 @@ def zhongjian_main(log):
|
|
|
:param log:
|
|
:param log:
|
|
|
"""
|
|
"""
|
|
|
log.info(
|
|
log.info(
|
|
|
- f'开始运行 {inspect.currentframe().f_code.co_name} 爬虫任务....................................................')
|
|
|
|
|
|
|
+ f'开始运行 {sys._getframe().f_code.co_name} 爬虫任务....................................................')
|
|
|
|
|
|
|
|
# 配置 MySQL 连接池
|
|
# 配置 MySQL 连接池
|
|
|
sql_pool = MySQLConnectionPool(log=log)
|
|
sql_pool = MySQLConnectionPool(log=log)
|
|
|
- if not sql_pool:
|
|
|
|
|
|
|
+ if not sql_pool.check_pool_health():
|
|
|
log.error("MySQL数据库连接失败")
|
|
log.error("MySQL数据库连接失败")
|
|
|
raise Exception("MySQL数据库连接失败")
|
|
raise Exception("MySQL数据库连接失败")
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
- # while True:
|
|
|
|
|
- # sql_ra_no_list = sql_pool.select_all('select tag_no from zhongjian_task where state = 0 limit 10000')
|
|
|
|
|
- sql_ra_no_list = sql_pool.select_all(
|
|
|
|
|
- "select tag_no from zhongjian_task where tag_no like '529%' and state = 0 limit 50000")
|
|
|
|
|
- # sql_ra_no_list = sql_pool.select_all("select tag_no from zhongjian_task where tag_no > '519354131' and state != 1 limit 10000")
|
|
|
|
|
- sql_ra_no_list = [i[0] for i in sql_ra_no_list]
|
|
|
|
|
- if not sql_ra_no_list:
|
|
|
|
|
- log.info(f'没有需要处理的数据,等待下一轮处理........................................................')
|
|
|
|
|
- # break
|
|
|
|
|
- return
|
|
|
|
|
-
|
|
|
|
|
- try:
|
|
|
|
|
- loop_rating_no(log, sql_pool, sql_ra_no_list)
|
|
|
|
|
- except Exception as e:
|
|
|
|
|
- log.error(f'{inspect.currentframe().f_code.co_name} error: {e}')
|
|
|
|
|
|
|
+ # 单轮内循环:每批取 5 万 state=0,处理完再取下一批,直到本轮把 state=0 抓空为止。
|
|
|
|
|
+ # loop_rating_no 对每条都会把 state 置为 1/2/3(必然离开 state=0),故循环单调收敛、不会死循环。
|
|
|
|
|
+ batch_no = 0
|
|
|
|
|
+ while True:
|
|
|
|
|
+ # 519/529/539/549 新入队的号码段均在此,走 index_state 索引
|
|
|
|
|
+ sql_ra_no_list = sql_pool.select_all(
|
|
|
|
|
+ "select tag_no from zhongjian_task where state = 0 limit 50000")
|
|
|
|
|
+ sql_ra_no_list = [i[0] for i in sql_ra_no_list]
|
|
|
|
|
+ if not sql_ra_no_list:
|
|
|
|
|
+ log.info(f'state=0 任务已全部处理完,本轮结束,等待下一轮........................................')
|
|
|
|
|
+ break
|
|
|
|
|
+
|
|
|
|
|
+ batch_no += 1
|
|
|
|
|
+ log.info(f'第 {batch_no} 批:取到 {len(sql_ra_no_list)} 条待处理,开始采集............')
|
|
|
|
|
+ try:
|
|
|
|
|
+ loop_rating_no(log, sql_pool, sql_ra_no_list)
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ log.error(f'{sys._getframe().f_code.co_name} 第 {batch_no} 批 error: {e}')
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
|
- log.error(f'{inspect.currentframe().f_code.co_name} error: {e}')
|
|
|
|
|
|
|
+ log.error(f'{sys._getframe().f_code.co_name} error: {e}')
|
|
|
finally:
|
|
finally:
|
|
|
- log.info(f'爬虫程序 {inspect.currentframe().f_code.co_name} 运行结束,等待下一轮的采集任务............')
|
|
|
|
|
|
|
+ log.info(f'爬虫程序 {sys._getframe().f_code.co_name} 运行结束,等待下一轮的采集任务............')
|
|
|
|
|
|
|
|
|
|
|
|
|
def schedule_task():
|
|
def schedule_task():
|
|
@@ -251,4 +254,5 @@ def schedule_task():
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
|
- schedule_task()
|
|
|
|
|
|
|
+ # schedule_task()
|
|
|
|
|
+ zhongjian_main(log=logger)
|