懂车帝移动端抓取
This commit is contained in:
@@ -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'],
|
||||||
|
|||||||
@@ -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')) {
|
||||||
|
|||||||
Reference in New Issue
Block a user