From 68a27d645c0367bb11e8e3e15b758d4405106c19 Mon Sep 17 00:00:00 2001 From: "WIN-C27C5MSVTPO\\16961" <1696136552@qq.com> Date: Fri, 23 Jan 2026 13:55:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=8A=93=E5=8F=96=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../crawl/service/UsedCarCrawlSingle.php | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/app/common/utils/crawl/service/UsedCarCrawlSingle.php b/app/common/utils/crawl/service/UsedCarCrawlSingle.php index 1459476..604ff4b 100644 --- a/app/common/utils/crawl/service/UsedCarCrawlSingle.php +++ b/app/common/utils/crawl/service/UsedCarCrawlSingle.php @@ -278,28 +278,13 @@ class UsedCarCrawlSingle $year = end($info); $cars['year'] = !empty($year) ? str_replace('款', '', $year):''; - //图片 - $images = $ql->find('.swiper-container2 .swiper-slide .jiaodianphotoclick img')->map(function ($img) { - // 优先尝试 data-original(懒加载图片) - $src = $img->attr('src'); - - // 如果没有 data-original,尝试 src - if (!$src || $src === '' ||str_contains($src, 'default-che168')) { - $src = $img->attr('data-original'); - } - - // 补全 https - if (str_starts_with($src, '//')) { - $src = 'https:' . $src; - } - - // 过滤掉占位符图片 - if (str_contains($src, 'default-che168')) { - return null; - } - - return $src; - })->filter()->values()->all(); + // 图片:主用轮播 .swiper-container2,备用 #pic_li(懒加载 data-original) + $images = $this->collectChe168Images($ql, '.swiper-container2 .swiper-slide .jiaodianphotoclick img', false); + if (empty($images)) { + $images = $this->collectChe168Images($ql, '#pic_li img', true); + } + $images = array_values(array_unique($images)); + var_dump($images); if (empty($images)) { Log::warning("crawlChe168Car:未找到任何车辆图片,URL: {$url}"); @@ -664,6 +649,28 @@ class UsedCarCrawlSingle return null; } + /** + * 从 che168 页面上收集图片 URL + * + * @param \QL\QueryList $ql + * @param string $selector 选择器 + * @param bool $preferDataOriginal 为 true 时优先用 data-original(#pic_li 懒加载) + * @return array + */ + protected function collectChe168Images($ql, string $selector, bool $preferDataOriginal): array + { + return $ql->find($selector)->map(function ($img) use ($preferDataOriginal) { + $src = $preferDataOriginal ? ($img->attr('data-original') ?: $img->attr('src')) : ($img->attr('src') ?: $img->attr('data-original')); + if (!$src || $src === '' || str_contains($src, 'default-che168')) { + return null; + } + if (str_starts_with($src, '//')) { + $src = 'https:' . $src; + } + return $src; + })->filter()->values()->all(); + } + /** * 将 che168 页面 (gb2312/gbk) 转为 UTF-8,避免 Linux 下 DOM 解析异常 *