'commit'
This commit is contained in:
@@ -199,24 +199,35 @@ class TeLaiDianCrawler(BaseCrawler):
|
||||
station_name = station_info.get("name")
|
||||
address = station_info.get("address")
|
||||
logger.info(f"[详情页] 进入 crawl_detail_logic,场站: {station_name} | 地址: {address}")
|
||||
logger.info(f"[详情页] 已截取首屏截图,启动异步基础信息识别任务: {first_screen_path}")
|
||||
logger.info(f"[详情页] 已截取首屏截图,准备识别基础信息: {first_screen_path}")
|
||||
|
||||
async def analyze_basic_info_background(image_path, fallback_name, fallback_address):
|
||||
try:
|
||||
basic_info = await self.read_image_kit.analyze_detail_basic_info(image_path)
|
||||
name2 = basic_info.get("name") or fallback_name
|
||||
addr2 = basic_info.get("address") or fallback_address
|
||||
logger.info(f"[异步] 详情页基础信息识别完成: {name2} | {addr2}")
|
||||
except Exception as ex:
|
||||
logger.error(f"[异步] 分析详情页基础信息失败: {ex}")
|
||||
finally:
|
||||
if os.path.exists(image_path):
|
||||
try:
|
||||
os.remove(image_path)
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
basic_info = await self.read_image_kit.analyze_detail_basic_info(first_screen_path)
|
||||
if isinstance(basic_info, dict):
|
||||
name2 = basic_info.get("name")
|
||||
addr2 = basic_info.get("address")
|
||||
if name2:
|
||||
station_name = name2
|
||||
if addr2:
|
||||
address = addr2
|
||||
logger.info(f"[详情页] 同步基础信息识别结果用于写库: {station_name} | {address}")
|
||||
except Exception as ex:
|
||||
logger.error(f"[详情页] 同步分析详情页基础信息失败: {ex}")
|
||||
finally:
|
||||
if os.path.exists(first_screen_path):
|
||||
try:
|
||||
os.remove(first_screen_path)
|
||||
except:
|
||||
pass
|
||||
|
||||
asyncio.create_task(analyze_basic_info_background(first_screen_path, station_name, address))
|
||||
template_xczs = os.path.join(os.path.dirname(__file__), "Template", "xczs.jpg")
|
||||
try:
|
||||
if os.path.exists(template_xczs):
|
||||
if d.image.click(template_xczs, timeout=3.0):
|
||||
logger.info("[详情页] 检测到温馨提示弹窗,已点击“下次再说”关闭。")
|
||||
await asyncio.sleep(1.5)
|
||||
except Exception as e:
|
||||
logger.error(f"[详情页] 通过模板点击关闭温馨提示弹窗失败: {e}")
|
||||
|
||||
w, h = d.window_size()
|
||||
logger.info("[详情页] 先执行一次较大的向上滑动,将详情内容上移一屏左右")
|
||||
@@ -427,7 +438,6 @@ class TeLaiDianCrawler(BaseCrawler):
|
||||
except:
|
||||
pass
|
||||
|
||||
# 6. 保存数据
|
||||
if all_prices:
|
||||
station_name_clean = clean_station_name(station_name)
|
||||
try:
|
||||
@@ -438,6 +448,13 @@ class TeLaiDianCrawler(BaseCrawler):
|
||||
await self.service.save_station_data(station_name_clean, address, all_prices)
|
||||
else:
|
||||
logger.warning(f"❌ 未能提取到任何价格信息,请检查页面识别逻辑")
|
||||
if address:
|
||||
station_name_clean = clean_station_name(station_name)
|
||||
logger.info(f"[详情页] 虽未获取价格,但已获取地址,尝试仅保存基础信息: {station_name_clean} | {address}")
|
||||
try:
|
||||
await self.service.save_station_profile_only(station_name_clean, address)
|
||||
except Exception as e:
|
||||
logger.error(f"[详情页] 仅保存基础信息失败: {e}")
|
||||
if os.path.exists(price_screen_path):
|
||||
os.remove(price_screen_path)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user