淘寶/天貓商品評論透過 Ajax 動態載入,介面無法直接查看原始碼。本文分享如何透過抓包分析介面參數,結合 PHP cURL 與正則表達式,批量抓取指定商品的評論內容與買家秀圊片,並補充商品搜尋列表抓取範例。
經抓包發現評論資料來源為:
https://rate.tmall.com/list_detail_rate.htm?itemId=524394294771&spuId=341564036&sellerId=100414600&order=3¤tPage=1&append=0&content=1&tagId=&posi=&picture=1&callback=jsonp2339
關鍵參數說明:
itemId:商品 ID(必填)currentPage:分頁頁碼picture=1:僅回傳含圖片的評論(買家秀必開)callback:JSONP 回呼函數名回應為 JSONP 格式(jsonp2339({...})),若直接 json_decode 會因前綴失敗。本文採用正則直接從原始回應擷取所需欄位,避開 JSONP 解析麻煩:
$pattern = '/"pics"(.+?)","reply"/is'; // 擷取單則評論區塊(含圖片與內容) $pattern2 = '/"rateContent":"(.+?)","reply"/is'; // 評論文字 $pattern3 = '/img\.alicdn(.+?)\.jpg/is'; // 圖片網址(相對路徑)
$url = "https://rate.tmall.com/list_detail_rate.htm?itemId=524394294771&spuId=341564036&sellerId=100414600&order=3¤tPage=1&append=0&content=1&tagId=&posi=&picture=1&callback=jsonp2339";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_FOLLOWLOCATION => true,
]);
$response = curl_exec($ch);
curl_close($ch);
preg_match_all($pattern, $response, $matches);
foreach ($matches[0] as $item) {
preg_match($pattern2, $item, $contentMatch);
$comment = str_replace(['"rateContent":"', '","reply"'], '', $contentMatch[0]);
echo "$comment
";
preg_match($pattern3, $item, $imgMatch);
if ($imgMatch) {
echo '
';
}
}
使用 Snoopy 類別模擬瀏覽器請求搜尋頁,再以正則擷取標題:
require "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->fetch("https://s.taobao.com/search?q=關鍵字&style=list");
preg_match_all('/.*<\/a>/', $snoopy->results, $result);
var_dump($result);
透過抓包分析介面參數、cURL 獲取原始回應、正則精準提取關鍵欄位,即可完成評論與圖片的自動化抓取。實務上務必評估法律與技術風險,優先採用官方授權管道獲取資料。