图片抓取优化
This commit is contained in:
@@ -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 解析异常
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user