首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 爬取淘寶分類 ID 完整實作(正則解析、編碼轉換、反爬應對)

     編輯:PHP 相關知識

目標

從淘寶分類頁面 https://list.taobao.com/browse/cat-0.htm 解析所有頂層分類的 cat 參數 ID 與中文名稱。

基礎實作


$url = 'https://list.taobao.com/browse/cat-0.htm';
$html = file_get_contents($url); // 需 allow_url_fopen=On

// 淘寶頁面編碼為 GB2312/GBK,轉 UTF-8 供正則處理
$html = mb_convert_encoding($html, 'UTF-8', 'GB2312');

// 正則匹配分類連結:分類名
$pattern = '/]*>(.*?)<\/a>/is';
preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);

$categories = [];
foreach ($matches as $m) {
    $catId = $m[1];
    $name  = trim(strip_tags($m[2]));
    if ($name !== '') {
        $categories[$catId] = $name;
    }
}

// 輸出
foreach ($categories as $id => $name) {
    echo "$id => $name\n";
}

進階:cURL 完整請求(模擬瀏覽器、處理重導向、Cookie、User-Agent)


function fetchTaobaoCategories(): array {
    $url = 'https://list.taobao.com/browse/cat-0.htm';
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        CURLOPT_REFERER        => 'https://www.taobao.com/',
        CURLOPT_TIMEOUT        => 15,
        CURLOPT_COOKIEJAR      => '', // 記憶體 Cookie
        CURLOPT_ENCODING       => 'gzip, deflate', // 自動解壓
    ]);
    $html = curl_exec($ch);
    if ($html === false) {
        throw new RuntimeException('cURL error: ' . curl_error($ch));
    }
    curl_close($ch);

    // 編碼轉換
    $html = mb_convert_encoding($html, 'UTF-8', 'GB2312');

    // 更精確正則:針對分類列表結構
    $pattern = '/]*>(.*?)<\/a>/is';
    preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);

    $result = [];
    foreach ($matches as $m) {
        $id = $m[1];
        $name = trim(strip_tags($m[2]));
        if ($name && !isset($result[$id])) {
            $result[$id] = $name;
        }
    }
    return $result;
}

print_r(fetchTaobaoCategories());

反爬蟲應對策略

策略實作
User-Agent 輪換維護真實瀏覽器 UA 池,隨機選取
IP 代理池付費住宅代理/資料中心代理,請求間隔隨機 2-5 秒
Cookie 維持首次請求取得 Cookie,後續請求攜帶
Headless 瀏覽器Puppeteer/Playwright/Selenium 渲染 JS 生成內容
頻率控制Token Bucket / Leaky Bucket 限流,單 IP 每分鐘 < 30 次
驗證碼識別遇到滑塊/點選驗證碼,接入打碼平台或人工介入

資料持久化與更新

  • 分類 ID 相對穩定,建議每日/每週排程更新一次。
  • 存入資料表 taobao_categories (cat_id, name, parent_id, level, updated_at)。
  • 變更通知:比對新舊資料,發現新增/刪除/更名時發送通知。

法律與合規提醒

爬蟲須遵守 robots.txt、網站服務條款、資料使用授權。淘寶/天貓嚴禁未授權爬取,商業用途請申請官方開放平台 API(需企業認證、簽約)。本文僅供技術研究參考。

結語

透過 cURL 模擬瀏覽器請求、GB2312 轉 UTF-8、精確正則解析,可獲取淘寶分類 ID 對照表。生產環境需配合代理池、頻率控制、Headless 渲染、合規審查。建議優先申請官方 API,穩定且合法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved