图片抓取优化

This commit is contained in:
2026-01-23 13:55:52 +08:00
parent 25891f2106
commit 68a27d645c
@@ -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<string>
*/
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 解析异常
*