图片抓取优化
This commit is contained in:
@@ -278,28 +278,13 @@ class UsedCarCrawlSingle
|
|||||||
$year = end($info);
|
$year = end($info);
|
||||||
$cars['year'] = !empty($year) ? str_replace('款', '', $year):'';
|
$cars['year'] = !empty($year) ? str_replace('款', '', $year):'';
|
||||||
|
|
||||||
//图片
|
// 图片:主用轮播 .swiper-container2,备用 #pic_li(懒加载 data-original)
|
||||||
$images = $ql->find('.swiper-container2 .swiper-slide .jiaodianphotoclick img')->map(function ($img) {
|
$images = $this->collectChe168Images($ql, '.swiper-container2 .swiper-slide .jiaodianphotoclick img', false);
|
||||||
// 优先尝试 data-original(懒加载图片)
|
if (empty($images)) {
|
||||||
$src = $img->attr('src');
|
$images = $this->collectChe168Images($ql, '#pic_li img', true);
|
||||||
|
}
|
||||||
// 如果没有 data-original,尝试 src
|
$images = array_values(array_unique($images));
|
||||||
if (!$src || $src === '' ||str_contains($src, 'default-che168')) {
|
var_dump($images);
|
||||||
$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();
|
|
||||||
|
|
||||||
if (empty($images)) {
|
if (empty($images)) {
|
||||||
Log::warning("crawlChe168Car:未找到任何车辆图片,URL: {$url}");
|
Log::warning("crawlChe168Car:未找到任何车辆图片,URL: {$url}");
|
||||||
@@ -664,6 +649,28 @@ class UsedCarCrawlSingle
|
|||||||
return null;
|
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 解析异常
|
* 将 che168 页面 (gb2312/gbk) 转为 UTF-8,避免 Linux 下 DOM 解析异常
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user