diff --git a/backend/app/service/UsedCarCrawlService.php b/backend/app/service/UsedCarCrawlService.php index a285f5d..fc0850b 100644 --- a/backend/app/service/UsedCarCrawlService.php +++ b/backend/app/service/UsedCarCrawlService.php @@ -617,22 +617,44 @@ class UsedCarCrawlService $html = $this->fetchHtml($url); $ql = QueryList::html($html); - // 解析车型列表 - $ql->find('div.carModelsPager__EiwGC a.model-item__1r8j')->each(function ($item) use (&$models) { - $modelName = trim($item->text()); - $modelUrl = $item->attr('href'); + // 使用 Tailwind CSS 类名选择器(懂车帝使用 Tailwind) + $nodes = $ql->find('div.tw-grid div.tw-relative div.tw-items-center>a'); + $texts = $nodes->texts()->all(); + $links = $nodes->attrs('href')->all(); - if ($modelName) { - $models[] = [ - 'name' => $modelName, - 'url' => $modelUrl ? 'https://www.dongchedi.com' . $modelUrl : '', - ]; + // 提取价格信息(可选) + $priceNodes = $ql->find('div.tw-grid div.tw-text-color-gray-800'); + $prices = $priceNodes->texts()->all(); + + foreach ($texts as $index => $text) { + $modelName = trim($text); + if (empty($modelName)) { + continue; } - }); + + $link = $links[$index] ?? ''; + if (!empty($link) && strpos($link, 'http') !== 0) { + $link = 'https://www.dongchedi.com' . $link; + } + + $priceStr = $prices[$index] ?? ''; + $msrp = 0; + if (!empty($priceStr)) { + $msrp = (int)(str_replace("万", "", $priceStr) * 10000); + } + + $models[] = [ + 'id' => $index, + 'name' => $modelName, + 'url' => $link, + 'msrp' => $msrp, + ]; + } return $models; - } catch (\Exception) { - // 车型解析失败,返回空数组 + } catch (\Exception $e) { + // 车型解析失败,记录日志并返回空数组 + error_log('获取车型列表失败: ' . $e->getMessage()); return []; } }