chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

把淘寶店鋪詳情搬進(jìn) MySQL:PHP 爬蟲全鏈路實(shí)戰(zhàn)(2025 版)

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

掃碼添加小助手

加入工程師交流群

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

選品:直播團(tuán)隊(duì)需要「店鋪評(píng)分、粉絲數(shù)、上新頻率」快速篩選靠譜供應(yīng)商

競(jìng)品:同一類目,對(duì)手店鋪突然漲粉 10w,第一時(shí)間預(yù)警

數(shù)據(jù)訓(xùn)練:店鋪簡(jiǎn)介 + 評(píng)分 → 做多模態(tài)情感分類

投資:提前發(fā)現(xiàn)「高評(píng)分+低粉絲」?jié)摿Φ?,談供?yīng)鏈合作

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

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

wKgZPGjwuteAeFh4AABp6DI8PT0747.png

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

bash

# 1. 安裝 PHP 8.2+ 擴(kuò)展
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. 創(chuàng)建項(xiàng)目
mkdir taobao-shop-php && cd taobao-shop-php
composer init --no-interaction --require="php:>=8.2"
composer install

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

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

店鋪主頁(yè):

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

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

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

返回:

JavaScript

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

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

php

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

調(diào)用前拼字符串:t + "&12574478&" + data + "&",其中 t 為毫秒時(shí)間戳。

② 網(wǎng)絡(luò)層: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); // 微秒
    }
}

③ 并發(fā)池:Guzzle Pool + 進(jìn)度條

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);
}

④ 落庫(kù):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 定時(shí):每天 8 點(diǎn)飛書播報(bào)

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

飛書推送(精簡(jiǎn)版)

php

function report(int $shopId, int $new): void {
    $body = json_encode([
        'msg_type' => 'text',
        'content'  => ['text' => "店鋪 $shopId 新增 $new 條商品,已落庫(kù)~"]
    ]);
    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

限速:?jiǎn)?IP 15 QPS 穩(wěn)過,> 200/10min 必出滑塊

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

重復(fù):Redis item_id_set 秒級(jí)去重,內(nèi)存省 90 %

六、結(jié)語

從店鋪主頁(yè)、JSONP 簽名、Guzzle 并發(fā)、Eloquent 落庫(kù),到 Docker 定時(shí) + 飛書群播報(bào),一條完整的 PHP 閉環(huán)就打通了。
全部代碼可直接扔進(jìn) PhpStorm / VSCode 跑通,改一行 shopId 就能薅任意店鋪。
祝各位運(yùn)營(yíng)、產(chǎn)品、算法大佬爬得開心,爆單更開心!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    459

    瀏覽量

    28188
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    891

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    京東商品詳情接口實(shí)戰(zhàn)解析:從調(diào)用優(yōu)化到商業(yè)價(jià)值挖掘(附避坑代碼)

    本文深入解析京東商品詳情接口jd.union.open.goods.detail.query,涵蓋核心特性、權(quán)限限制、關(guān)鍵參數(shù)及調(diào)用避坑指南。通過實(shí)戰(zhàn)代碼演示數(shù)據(jù)采集、促銷解析與商業(yè)分析,助力開發(fā)者高效獲取價(jià)格、庫(kù)存、評(píng)價(jià)等
    的頭像 發(fā)表于 10-10 09:28 ?195次閱讀
    京東商品<b class='flag-5'>詳情</b>接口<b class='flag-5'>實(shí)戰(zhàn)</b>解析:從調(diào)用優(yōu)化到商業(yè)價(jià)值挖掘(附避坑代碼)

    淘寶拍立淘接口實(shí)戰(zhàn):圖像優(yōu)化、識(shí)別調(diào)優(yōu)與避坑代碼示例

    本文詳解淘寶拍立淘接口(taobao.picture.search)實(shí)戰(zhàn)技巧,涵蓋圖像預(yù)處理、識(shí)別優(yōu)化、簽名生成與供應(yīng)數(shù)據(jù)聯(lián)動(dòng),結(jié)合代碼示例解析高頻坑點(diǎn),如Base64格式錯(cuò)誤、限流處理、分頁(yè)失效等,助開發(fā)者提升識(shí)別率至85%
    的頭像 發(fā)表于 10-09 14:28 ?125次閱讀

    別踩分頁(yè)坑!京東商品詳情接口實(shí)戰(zhàn)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    京東商品詳情接口(jingdong.ware.get)是電商數(shù)據(jù)開發(fā)的核心難點(diǎn),本文詳解其權(quán)限申請(qǐng)、分頁(yè)優(yōu)化、多規(guī)格遞歸解析與完整性校驗(yàn)等實(shí)戰(zhàn)方案,結(jié)合代碼示例與性能調(diào)優(yōu)參數(shù),助你高效穩(wěn)定對(duì)接,提升數(shù)據(jù)獲取效率2.5倍以上,適用于各類規(guī)模
    的頭像 發(fā)表于 09-30 15:50 ?742次閱讀

    別再卡分頁(yè)!淘寶量商品接口實(shí)戰(zhàn)開發(fā)指南:從并發(fā)優(yōu)化到數(shù)據(jù)完整性閉環(huán)

    淘寶店鋪量商品接口實(shí)戰(zhàn)指南:詳解權(quán)限申請(qǐng)、分頁(yè)優(yōu)化、并發(fā)拉取與增量更新,結(jié)合代碼實(shí)現(xiàn)高效穩(wěn)定的數(shù)據(jù)獲取,解決超時(shí)、限流、數(shù)據(jù)丟失等核心難題,助力電商數(shù)據(jù)分析避坑提效。
    的頭像 發(fā)表于 09-30 10:47 ?191次閱讀

    揭秘淘寶詳情 API 接口:解鎖電商數(shù)據(jù)應(yīng)用新玩法

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

    淘寶商品詳情接口(item_get)企業(yè)級(jí)解析:參數(shù)配置、簽名機(jī)制與 Python 代碼實(shí)戰(zhàn)

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

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

    PHP 語言 實(shí)現(xiàn)一個(gè) 可運(yùn)行的京東商品爬蟲 ,不僅能抓取商品標(biāo)題、價(jià)格、圖片、評(píng)價(jià)數(shù),還能應(yīng)對(duì)常見的反爬策略。全文附完整代碼, 復(fù)制粘貼即可運(yùn)行 。 一、為什么選擇 PHP爬蟲
    的頭像 發(fā)表于 09-23 16:42 ?385次閱讀
    從 0 到 1:用 <b class='flag-5'>PHP</b> <b class='flag-5'>爬蟲</b>優(yōu)雅地拿下京東商品<b class='flag-5'>詳情</b>

    淘寶商品詳情 API 實(shí)戰(zhàn):5 大策略提升店鋪轉(zhuǎn)化率(附簽名優(yōu)化代碼 + 避坑指南)

    ”“差評(píng)失控” 等轉(zhuǎn)化率殺手。本文結(jié)合我對(duì)接 300 + 淘寶店鋪實(shí)戰(zhàn)經(jīng)驗(yàn),拆解 API 如何落地到動(dòng)態(tài)定價(jià)、庫(kù)存預(yù)警等 5 大場(chǎng)景,代碼做了簽名優(yōu)化和錯(cuò)誤處理,新手也能直接復(fù)用,避開 90% 的調(diào)用坑。 一、
    的頭像 發(fā)表于 09-15 10:53 ?572次閱讀

    淘寶/天貓:通過商品詳情API實(shí)現(xiàn)多店鋪商品信息批量同步,確保價(jià)格、庫(kù)存實(shí)時(shí)更新

    ? 在電商運(yùn)營(yíng)中,管理多個(gè)淘寶或天貓店鋪的商品信息(如價(jià)格和庫(kù)存)是一項(xiàng)繁瑣的任務(wù)。手動(dòng)更新耗時(shí)耗力,且容易出錯(cuò),導(dǎo)致價(jià)格不一致或庫(kù)存超賣。通過淘寶/天貓開放平臺(tái)提供的商品詳情API,
    的頭像 發(fā)表于 09-08 16:05 ?336次閱讀
    <b class='flag-5'>淘寶</b>/天貓:通過商品<b class='flag-5'>詳情</b>API實(shí)現(xiàn)多<b class='flag-5'>店鋪</b>商品信息批量同步,確保價(jià)格、庫(kù)存實(shí)時(shí)更新

    深入剖析Docker安全防護(hù)策略

    在云原生時(shí)代,Docker容器安全已成為運(yùn)維工程師必須面對(duì)的核心挑戰(zhàn)。本文將從實(shí)戰(zhàn)角度深入剖析Docker安全防護(hù)策略,涵蓋鏡像構(gòu)建、容器運(yùn)行、網(wǎng)絡(luò)隔離等關(guān)鍵環(huán)節(jié),助你構(gòu)建企業(yè)級(jí)
    的頭像 發(fā)表于 08-18 11:17 ?582次閱讀

    淘寶 API 實(shí)現(xiàn)天貓店鋪商品詳情頁(yè)智能優(yōu)化

    ? 在競(jìng)爭(zhēng)激烈的電商環(huán)境中,天貓店鋪的商品詳情頁(yè)是影響用戶轉(zhuǎn)化率的關(guān)鍵因素。通過淘寶開放平臺(tái)提供的API,我們可以實(shí)現(xiàn)智能優(yōu)化,提升用戶體驗(yàn)和銷售業(yè)績(jī)。本文將從零開始,逐步介紹如何利用淘寶
    的頭像 發(fā)表于 08-13 14:35 ?459次閱讀
    用<b class='flag-5'>淘寶</b> API 實(shí)現(xiàn)天貓<b class='flag-5'>店鋪</b>商品<b class='flag-5'>詳情</b>頁(yè)智能優(yōu)化

    淘寶 API 助力,天貓店鋪商品上下架智能管理

    ? 在當(dāng)今電商競(jìng)爭(zhēng)激烈的環(huán)境中,天貓店鋪的商品管理效率直接影響銷售業(yè)績(jī)。手動(dòng)處理商品上架和下架不僅耗時(shí)耗力,還容易出錯(cuò),導(dǎo)致庫(kù)存積壓或錯(cuò)失銷售機(jī)會(huì)。淘寶開放平臺(tái)提供的 API(應(yīng)用程序接口)為
    的頭像 發(fā)表于 08-13 14:28 ?444次閱讀
    <b class='flag-5'>淘寶</b> API 助力,天貓<b class='flag-5'>店鋪</b>商品上下架智能管理

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

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

    沐曦算力方案亮相WAIC 2025

    以“智能時(shí)代 同球共濟(jì)”為主題的2025世界人工智能大會(huì)(WAIC)于7月26日在上海開幕,全球人工智能領(lǐng)域的技術(shù)創(chuàng)新與產(chǎn)業(yè)實(shí)踐成為焦點(diǎn)。沐曦集成電路(上海)股份有限公司(以下簡(jiǎn)稱“沐曦”)攜
    的頭像 發(fā)表于 08-01 11:58 ?6013次閱讀

    爬蟲數(shù)據(jù)獲取實(shí)戰(zhàn)指南:從入門到高效采集

    爬蟲數(shù)據(jù)獲取實(shí)戰(zhàn)指南:從入門到高效采集 ? ? 在數(shù)字化浪潮中,數(shù)據(jù)已成為驅(qū)動(dòng)商業(yè)增長(zhǎng)的核心引擎。無論是市場(chǎng)趨勢(shì)洞察、競(jìng)品動(dòng)態(tài)追蹤,還是用戶行為分析,爬蟲技術(shù)都能助你快速捕獲目標(biāo)信息。然而,如何既
    的頭像 發(fā)表于 03-24 14:08 ?1014次閱讀