国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

把淘寶店鋪詳情搬進 MySQL:PHP 爬蟲全鏈路實戰(2025 版)

劉大雷 ? 來源:jf_82280871 ? 作者:jf_82280871 ? 2025-10-16 17:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、為什么要自己爬店鋪詳情?

選品:直播團隊需要「店鋪評分、粉絲數、上新頻率」快速篩選靠譜供應商

競品:同一類目,對手店鋪突然漲粉 10w,第一時間預警

數據訓練:店鋪簡介 + 評分 → 做多模態情感分類

投資:提前發現「高評分+低粉絲」潛力店,談供應鏈合作

官方 taobao.shop.get 需要企業資質,個人 99% 被卡;網頁端「店鋪主頁」公開可見,走網頁派依舊是最低成本方案。下面用純 PHP 把「店鋪主頁 → 基礎信息 → 商品列表 → 落庫 → 飛書播報」一次擼完。

二、技術選型(全部開源)

wKgZPGjwuteAeFh4AABp6DI8PT0747.png

三、0 環境搭建(Linux / Win / mac 通用)

bash

# 1. 安裝 PHP 8.2+ 擴展
sudo dnf install php php-cli php-curl php-dom php-mbstring php-pdo php-mysqlnd

# 2. 安裝 Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

# 3. 創建項目
mkdir taobao-shop-php && cd taobao-shop-php
composer init --no-interaction --require="php:>=8.2"
composer install

四、核心流程:6 步閉環(全部代碼可跑)

① 找入口:店鋪主頁 + 簽名算法(2025-10 有效)

店鋪主頁:

https://shop{m}.taobao.com/shop/shop_index.htm?shop_id={shop_id}

店鋪內所有商品接口(JSONP):

https://shop.m.taobao.com/shop/shopItemSearch.jsonp?shopId={shop_id}¤tPage={page}&pageSize=20&callback=jsonp123

返回:

JavaScript

jsonp123({"total":1523,"items":[{...}]})

簽名邏輯(與詳情頁同款):

php

function sign(string $raw): string {
    return strtoupper(md5($raw));
}

調用前拼字符串:t + "&12574478&" + data + "&",其中 t 為毫秒時間戳。

② 網絡層:GuzzleHttp 7 + 連接池

php

http = new Client([
            'timeout' => 10,
            'headers' => [
                'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
                'Referer' => 'https://shop.taobao.com/'
            ]
        ]);
    }

    public function fetchIndex(int $shopId): array {
        $url = "https://shop.taobao.com/shop/shop_index.htm?shop_id={$shopId}";
        $html = $this->http->get($url)->getBody()->getContents();
        return $this->parseIndex($html, $shopId);
    }

    public function fetchItems(int $shopId, int $page = 1): array {
        $this->rateLimit(); // 限速
        $callback = 'jsonp' . microtime(true);
        $data = json_encode(['shopId' => $shopId, 'currentPage' => $page], JSON_UNESCAPED_SLASHES);
        $t = (string) (microtime(true) * 1000);
        $sign = sign($t . "&12574478&" . $data . "&");

        $url = "https://shop.m.taobao.com/shop/shopItemSearch.jsonp?" . http_build_query([
            'shopId' => $shopId,
            'currentPage' => $page,
            'pageSize' => 20,
            'callback' => $callback,
            't' => $t,
            'sign' => $sign
        ]);

        $jsonp = $this->http->get($url)->getBody()->getContents();
        $json = preg_replace('/^jsonpd+(|)$/m', '', $jsonp);
        return $this->parseItems(json_decode($json, true), $shopId);
    }

    private function parseIndex(string $html, int $shopId): array {
        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        $xpath = new DOMXPath($doc);
        return [
            'shop_id' => $shopId,
            'shop_name' => trim($xpath->query("http://h1[@class='shop-name']")->item(0)?->nodeValue ?? ''),
            'shop_score' => trim($xpath->query("http://span[@class='shop-score']")->item(0)?->nodeValue ?? ''),
            'shop_fans' => trim($xpath->query("http://span[@class='shop-fans']")->item(0)?->nodeValue ?? ''),
        ];
    }

    private function parseItems(array $root, int $shopId): array {
        $items = [];
        foreach ($root['items'] ?? [] as $i) {
            $items[] = [
                'shop_id' => $shopId,
                'item_id' => $i['itemId'],
                'title' => $i['title'],
                'price' => $i['price'],
                'pic_url' => $i['picUrl'],
                'sold' => $i['sold'] ?? 0,
                'comment_count' => $i['commentCount'] ?? 0,
                'created_at' => date('Y-m-d H:i:s', $i['created'] / 1000)
            ];
        }
        return $items;
    }

    private function rateLimit(): void {
        usleep(1000000 / $this->qps); // 微秒
    }
}

③ 并發池:Guzzle Pool + 進度條

php

public function fetchAllItems(int $shopId, int $maxPage = 200): array {
    $first = $this->fetchItems($shopId, 1);
    $totalPage = min(ceil(($first['total'] ?? 0) / 20), $maxPage);

    $requests = function () use ($shopId, $totalPage) {
        for ($p = 2; $p <= $totalPage; $p++) {
            yield new Request('GET', $this-?>buildItemUrl($shopId, $p));
        }
    };

    $items = [];
    $pool = new Pool($this->http, $requests(), [
        'concurrency' => 15, // 令牌桶
        'fulfilled' => function ($response, $index) use (&$items, $shopId) {
            $jsonp = $response->getBody()->getContents();
            $json = preg_replace('/^jsonpd+(|)$/m', '', $jsonp);
            $items[] = $this->parseItems(json_decode($json, true), $shopId);
        },
        'rejected' => function ($reason, $index) {
            Log::error("Page $index failed: $reason");
        },
    ]);
    $pool->promise()->wait();
    return array_merge(...$items);
}

④ 落庫:Laravel Eloquent 批量 + Redis 去重

sql

CREATE TABLE tb_shop_detail (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  shop_id BIGINT NOT NULL,
  shop_name VARCHAR(100) NOT NULL,
  shop_score VARCHAR(20) NOT NULL,
  shop_fans VARCHAR(20) NOT NULL,
  item_id BIGINT NOT NULL,
  title VARCHAR(200) NOT NULL,
  price VARCHAR(30) NOT NULL,
  pic_url VARCHAR(500) NOT NULL,
  sold INT DEFAULT 0,
  comment_count INT DEFAULT 0,
  created_at DATETIME NOT NULL,
  UNIQUE KEY uk_item (item_id),
  INDEX idx_shop (shop_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

模型:

php


批量插入:

php

use IlluminateSupportFacadesDB;
use AppModelsShopDetail;

function bulkSave(array $rows): int
{
    $new = 0;
    foreach (array_chunk($rows, 1000) as $chunk) {
        $exists = Redis::command('sadd', ['item_id_set', ...array_column($chunk, 'item_id')]);
        $filtered = array_filter($chunk, fn($i) => $exists[$i['item_id']] ?? false);
        if ($filtered) {
            ShopDetail::insert($filtered);
            $new += count($filtered);
        }
    }
    return $new;
}

⑥ Docker 定時:每天 8 點飛書播報

Dockerfile

dockerfile

FROM php:8.2-cli
RUN apt-get update && apt-get install -y libcurl4-openssl-dev libssl-dev libzip-dev 
    && docker-php-ext-install pdo_mysql curl zip
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /app
COPY . .
RUN composer install --no-dev
CMD ["php","crawl.php"]

crontab

0 8 * * * docker run --rm -v /mnt/nas/shop:/app/storage taobao-shop-php

飛書推送(精簡版)

php

function report(int $shopId, int $new): void {
    $body = json_encode([
        'msg_type' => 'text',
        'content'  => ['text' => "店鋪 $shopId 新增 $new 條商品,已落庫~"]
    ]);
    file_get_contents('https://open.feishu.cn/open-apis/bot/v2/hook/xxx', false, stream_context_create([
        'http' => ['method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => $body]
    ]));
}

五、踩坑 & 反爬錦囊

JSONP 殼:正則為 ^jsonpd+(|)$,剝完再 json_decode

Referer:必須 https://shop.taobao.com/,否則 403

限速:單 IP 15 QPS 穩過,> 200/10min 必出滑塊

代理池:青果云 1G ≈ 0.8 元,能跑 8 萬頁

重復:Redis item_id_set 秒級去重,內存省 90 %

六、結語

從店鋪主頁、JSONP 簽名、Guzzle 并發、Eloquent 落庫,到 Docker 定時 + 飛書群播報,一條完整的 PHP 閉環就打通了。
全部代碼可直接扔進 PhpStorm / VSCode 跑通,改一行 shopId 就能薅任意店鋪。
祝各位運營、產品、算法大佬爬得開心,爆單更開心!

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • PHP
    PHP
    +關注

    關注

    0

    文章

    462

    瀏覽量

    28622
  • MySQL
    +關注

    關注

    1

    文章

    905

    瀏覽量

    29518
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    淘寶商品詳情API(tb.item_get)

    一、前言 淘寶作為國內頭部電商平臺,沉淀了海量的商品數據,商品詳情數據更是電商生態中核心的信息資產,無論是 代購集運系統商品信息同步 、 電商選品分析工具開發 、 比價平臺搭建 ,還是 電商數
    的頭像 發表于 01-28 11:53 ?373次閱讀

    淘寶店鋪量商品API接口技術實踐指南

    在電商數字化運營與數據分析場景中,高效獲取店鋪量商品數據是核心需求之一。淘寶開放平臺提供的店鋪量商品API接口(核心接口:taobao.
    的頭像 發表于 01-23 10:55 ?320次閱讀

    Pickering高可靠開關矩陣搬進車載供應

    滲透率飆升背后,是對產線節拍和可靠性的雙重考驗。品英Pickering在航天、軍工領域驗證過的開關矩陣搬進車載供應,用PXI模塊幫雷達廠商測試、校準、可靠性驗證三道工序在同一臺架
    的頭像 發表于 01-13 14:35 ?478次閱讀

    1688店鋪詳情API使用指南

    等級、主營品類等核心數據。該接口為電商數據分析、店鋪監控、供應對接、導購平臺開發等場景提供了關鍵的數據支撐。本文將從 摘要、接口概述、Python 請求示例、結語 四個維度,詳細介紹該 API 的使用方式。 一、摘要 1688 店鋪
    的頭像 發表于 12-19 10:20 ?1459次閱讀

    # 深度解析:爬蟲技術獲取淘寶商品詳情并封裝為API的流程應用

    需求。本文將深入探討如何借助爬蟲技術實現淘寶商品詳情的獲取,并將其高效封裝為API。 一、爬蟲技術核心原理與工具 1.1 爬蟲運行機制 網絡
    的頭像 發表于 11-17 09:29 ?341次閱讀

    淘寶平臺獲取店鋪商品列表API接口實現詳解

    ? 在電商數據分析、店鋪管理工具開發或競品監控等場景下,通過API接口獲取淘寶店鋪的商品列表數據是一項常見且重要的需求。本文將介紹如何通過淘寶開放平臺的API接口實現這一功能。 一、
    的頭像 發表于 11-06 15:22 ?426次閱讀
    <b class='flag-5'>淘寶</b>平臺獲取<b class='flag-5'>店鋪</b>商品列表API接口實現詳解

    淘寶商品詳情API接口技術解析與實戰應用

    隨著電商行業的快速發展,數據驅動的決策模式已成為企業核心競爭力的重要組成部分。淘寶作為國內領先的電商平臺,其開放平臺提供的商品詳情API接口為開發者提供了獲取商品維度數據的通道。本文從技術實現角度
    的頭像 發表于 11-04 09:50 ?334次閱讀

    別再卡分頁!淘寶量商品接口實戰開發指南:從并發優化到數據完整性閉環

    淘寶店鋪量商品接口實戰指南:詳解權限申請、分頁優化、并發拉取與增量更新,結合代碼實現高效穩定的數據獲取,解決超時、限流、數據丟失等核心難題,助力電商數據分析避坑提效。
    的頭像 發表于 09-30 10:47 ?568次閱讀

    揭秘淘寶詳情 API 接口:解鎖電商數據應用新玩法

    在電商的浩瀚宇宙中,淘寶無疑是一顆璀璨的巨星。對于開發者、電商從業者來說,獲取淘寶商品的詳細信息是一項常見且重要的需求。而淘寶詳情 API 接口,就像是一
    的頭像 發表于 09-29 14:30 ?434次閱讀

    淘寶商品詳情接口(item_get)企業級解析:參數配置、簽名機制與 Python 代碼實戰

    本文詳解淘寶開放平臺taobao.item_get接口對接流程,涵蓋參數配置、MD5簽名生成、Python企業級代碼實現及高頻問題排查,提供可落地的實戰方案,助你高效穩定獲取商品數據。
    的頭像 發表于 09-26 09:13 ?835次閱讀
    <b class='flag-5'>淘寶</b>商品<b class='flag-5'>詳情</b>接口(item_get)企業級<b class='flag-5'>全</b>解析:參數配置、簽名機制與 Python 代碼<b class='flag-5'>實戰</b>

    從 0 到 1:用 PHP 爬蟲優雅地拿下京東商品詳情

    PHP 語言 實現一個 可運行的京東商品爬蟲 ,不僅能抓取商品標題、價格、圖片、評價數,還能應對常見的反爬策略。全文附完整代碼, 復制粘貼即可運行 。 一、為什么選擇 PHP爬蟲
    的頭像 發表于 09-23 16:42 ?852次閱讀
    從 0 到 1:用 <b class='flag-5'>PHP</b> <b class='flag-5'>爬蟲</b>優雅地拿下京東商品<b class='flag-5'>詳情</b>

    淘寶商品詳情 API 實戰:5 大策略提升店鋪轉化率(附簽名優化代碼 + 避坑指南)

    ”“差評失控” 等轉化率殺手。本文結合我對接 300 + 淘寶店鋪實戰經驗,拆解 API 如何落地到動態定價、庫存預警等 5 大場景,代碼做了簽名優化和錯誤處理,新手也能直接復用,避開 90% 的調用坑。 一、
    的頭像 發表于 09-15 10:53 ?976次閱讀

    淘寶/天貓:通過商品詳情API實現多店鋪商品信息批量同步,確保價格、庫存實時更新

    ? 在電商運營中,管理多個淘寶或天貓店鋪的商品信息(如價格和庫存)是一項繁瑣的任務。手動更新耗時耗力,且容易出錯,導致價格不一致或庫存超賣。通過淘寶/天貓開放平臺提供的商品詳情API,
    的頭像 發表于 09-08 16:05 ?976次閱讀
    <b class='flag-5'>淘寶</b>/天貓:通過商品<b class='flag-5'>詳情</b>API實現多<b class='flag-5'>店鋪</b>商品信息批量同步,確保價格、庫存實時更新

    淘寶 API 實現天貓店鋪商品詳情頁智能優化

    ? 在競爭激烈的電商環境中,天貓店鋪的商品詳情頁是影響用戶轉化率的關鍵因素。通過淘寶開放平臺提供的API,我們可以實現智能優化,提升用戶體驗和銷售業績。本文將從零開始,逐步介紹如何利用淘寶
    的頭像 發表于 08-13 14:35 ?808次閱讀
    用<b class='flag-5'>淘寶</b> API 實現天貓<b class='flag-5'>店鋪</b>商品<b class='flag-5'>詳情</b>頁智能優化

    揭秘淘寶 API,讓天貓店鋪流量來源一目了然

    ? 在當今競爭激烈的電商環境中,天貓店鋪的運營者最關心的問題之一就是:流量從哪里來?了解流量來源不僅能優化營銷策略,還能提升轉化率。淘寶開放平臺提供的 API 接口,正是解鎖這一秘密的鑰匙。本文將
    的頭像 發表于 08-12 14:48 ?839次閱讀
    揭秘<b class='flag-5'>淘寶</b> API,讓天貓<b class='flag-5'>店鋪</b>流量來源一目了然