懂车帝移动端抓取

This commit is contained in:
2026-01-21 17:03:42 +08:00
parent 650f943037
commit 892325008c
3 changed files with 49 additions and 7 deletions
+2 -1
View File
@@ -154,7 +154,8 @@ class UsedCarController extends BaseController
if (empty($url)){ if (empty($url)){
throw new BusinessException('url不能为空'); throw new BusinessException('url不能为空');
} }
$info = (new UsedCarCrawlSingle())->crawlCar($url); //$info = (new UsedCarCrawlSingle())->crawlCar($url);
$info = $this->service->selectCraw($url);
$data = [ $data = [
'user_id' => $request->user['id'], 'user_id' => $request->user['id'],
'product_name' => $info['title'], 'product_name' => $info['title'],
+35
View File
@@ -2,6 +2,7 @@
namespace app\common\service; namespace app\common\service;
use app\common\utils\crawl\service\UsedCarCrawlSingle;
use app\common\validate\UsedCarValidate; use app\common\validate\UsedCarValidate;
use app\common\traits\crud\CrudServiceTrait; use app\common\traits\crud\CrudServiceTrait;
use app\common\model\UsedCar; use app\common\model\UsedCar;
@@ -421,4 +422,38 @@ class UsedCarService
return $path; return $path;
} }
/**
* 选择车辆抓取方式
* @param string $url
*/
public function selectCraw(string $url){
$usedCarCrawl = new UsedCarCrawlSingle();
switch (true){
case str_contains($url,'dongchedi.com'): //懂车帝pc端
$info = $usedCarCrawl->crawlCar($url);
break;
case str_contains($url,'dcdapp.com'): //懂车帝移动端
$finalUrl = $usedCarCrawl->getPcUrl($url); //获取pc端页面链接
if(empty($finalUrl)){
throw new \Exception('链接解析错误');
}
$info = $usedCarCrawl->crawlCar($finalUrl);
break;
case str_contains($url,'t.zijieimg.com'): //懂车帝移动端分享链接
$finalUrl = $usedCarCrawl->getFinaUrl($url); //解析抖音短链,并获取pc端页面链接
if(empty($finalUrl)){
throw new \Exception('链接解析错误');
}
$info = $usedCarCrawl->crawlCar($finalUrl);
break;
case str_contains($url,'che168.com'): //汽车之家
throw new \Exception('加紧开发中');
break;
default:
Log::info('未知链接:'.$url);
throw new \Exception('加紧开发中');
}
return $info;
}
} }
@@ -40,7 +40,7 @@ class UsedCarCrawlSingle
} }
/** /**
* 获取移动端最终url * 获取懂车帝移动端分享短链最终url
* *
* @param string $url * @param string $url
* @return string * @return string
@@ -58,17 +58,17 @@ class UsedCarCrawlSingle
$history = $response->getHeader('X-Guzzle-Redirect-History'); $history = $response->getHeader('X-Guzzle-Redirect-History');
$finalUrl = end($history); $finalUrl = end($history);
$sku_id = $this->getSkuIdFromUrl($finalUrl); $pcUrl = $this->getPcUrl($finalUrl);
return 'https://www.dongchedi.com/usedcar/'.$sku_id; return $pcUrl;
} }
/** /**
* 从url获取sku_id * 从移动端url获取sku_id
* @param string $url * @param string $url
* @return string|null * @return string|null
*/ */
public function getSkuIdFromUrl(string $url): ?string public function getPcUrl(string $url): ?string
{ {
$query = parse_url($url, PHP_URL_QUERY); $query = parse_url($url, PHP_URL_QUERY);
if (!$query) { if (!$query) {
@@ -77,9 +77,15 @@ class UsedCarCrawlSingle
parse_str($query, $params); parse_str($query, $params);
return $params['sku_id'] ?? null; return !empty($params['sku_id']) ? 'https://www.dongchedi.com/usedcar/'.$params['sku_id'] : null;
} }
/**
* 抓取懂车帝二手车信息
* @param string $url
* @return array
* @throws GuzzleException
*/
public function crawlCar(string $url){ public function crawlCar(string $url){
$html = $this->fetchHtml($url); $html = $this->fetchHtml($url);
if ($html === '' || str_contains($html, '404 Not Found')) { if ($html === '' || str_contains($html, '404 Not Found')) {