全部
常见问题
产品动态
精选推荐

把 1688 搬进 Excel:PHP 零依赖爬虫「软文 + 硬货」全纪录

管理 管理 编辑 删除

一、故事开场:采购小姐姐的周五 17:30

义乌某电商公司,采购每周要汇报「1688 女式 T 恤均价」:

  • 人工滑屏 200 条 → 眼花了
  • Excel 手填 → 错了
  • 周五熬夜 → 秃了
  • 后端同事甩给她一个 60 行 PHP 脚本
  • 输入关键词 → 自动抓 500 条
  • 一键导出 CSV → Excel 透视图直接出
  • 周五 17:30 下班 → 老板夸「高效」
  • 今天把完整思路开源,虚拟主机也能跑,复制即可用。


二、先选赛道:为什么选「公开接口」而不是「登录爬虫」


方案封号风险维护成本数据完整度选用
模拟登录+滑块极高100%
无头浏览器95%
1688 官方 OpenAPI099%✅ 首推
公开游客 HTML极低80%⚠️ 备选
结论:
  • 能申请 官方 API → 走签名通道(合规、稳定、可商用)
  • 练手/无密钥 → 走 游客 HTML 解析(零门槛、字段够用)
  • 本文 一文双吃:先给「签名 API」极速版,再给「HTML 解析」备用版,任你挑。


三、极速版①:官方 API 签名通道(推荐)

① 申请入口

https://open.1688.com → 注册「个人开发者」→ 创建「自用型」应用
能力市场搜索 offer.search 或 offer.detail → 秒过
拿到:AppKey、AppSecret、日配额 5k~2w 次(免费)

② 签名规则(TOP 标准)sign = strtoupper(md5(secret + 字典序(参数) + secret))


③ 60 行源码(零依赖,原生 curl)

保存为 alibaba_api.php

php

#!/usr/bin/env php
<?php
/* 1688 官方 API 签名版 - 零依赖 */
$appKey   = '你的AppKey';
$appSecret= '你的AppSecret';
$keyword  = $argv[1] ?? readline('关键词:');
$page     = (int)($argv[2] ?? 1);
$fields   = 'offerId,title,price,picUrl,detailUrl'; // 按需增删

$api = 'https://eco.1688.com/router/rest';
$params = [
    'method'      => 'cn.alibaba.open:offer.search',
    'app_key'     => $appKey,
    'timestamp'   => date('Y-m-d H:i:s'),
    'format'      => 'json',
    'v'           => '2.0',
    'sign_method' => 'md5',
    'keywords'    => $keyword,
    'pageNo'      => $page,
    'pageSize'    => 20,
    'fields'      => $fields,
];
$params['sign'] = sign($appSecret, $params);

$resp = http_get($api . '?' . http_build_query($params));
$data = json_decode($resp, true);
if (isset($data['error_response'])) {
    die('API Error:' . $data['error_response']['msg']);
}
$offers = $data['offer_search_response']['result']['offers'] ?? [];

$csv = "offerId,title,price,picUrl,detailUrl\n";
foreach ($offers as $o) {
    $csv .= implode(',', [
        $o['offerId'],
        '"' . str_replace('"', '""', $o['title']) . '"',
        $o['price'],
        $o['picUrl'],
        $o['detailUrl']
    ]) . "\n";
}
$file = "1688_{$keyword}_" . date('Ymd') . ".csv";
file_put_contents($file, $csv);
echo "已导出 " . count($offers) . " 条 → $file\n";

/* ---------- 工具函数 ---------- */
function sign($secret, $params) {
    ksort($params);
    $str = $secret;
    foreach ($params as $k => $v) if ($k != 'sign' && $v !== '') $str .= $k . $v;
    $str .= $secret;
    return strtoupper(md5($str));
}

function http_get($url) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 15,
        CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        CURLOPT_FOLLOWLOCATION => true,
    ]);
    $resp = curl_exec($ch);
    curl_close($ch);
    return $resp ?: throw new Exception('CURL Error');
}

运行:

$ php alibaba_api.php "女式T恤" 2
已导出 40 条 → 1688_女式T恤_20250929.csv

字段齐全:offerId、标题、价格、主图 URL、详情链接,足够做行情面板。


四、备用版②:游客 HTML 解析(无密钥练手)

① 分析列表页

URL 示例:https://s.1688.com/selloffer/offer_search.htm?keywords=女式T恤&page=1


  • 商品块:.sm-offer-item
  • 标题:.offer-title
  • 价格:.price
  • 销量:.sales

② 使用 Guzzle + DOMXPath(60 行)

安装:

bash

composer require guzzlehttp/guzzle

代码 alibaba_html.php

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

function searchProducts($keyword, $page = 1) {
    $client = new Client();
    $url = "https://s.1688.com/selloffer/offer_search.htm?keywords=" . urlencode($keyword) . "&page={$page}";
    $html = $client->get($url, [
        'headers' => ['User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36']
    ])->getBody()->getContents();

    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $items = $xpath->query("//div[contains(@class,'sm-offer-item')]");

    $data = [];
    foreach ($items as $node) {
        $title = trim($xpath->evaluate("string(.//a[@class='offer-title'])", $node));
        $price = trim($xpath->evaluate("string(.//span[contains(@class,'price')])", $node));
        $sales = trim($xpath->evaluate("string(.//span[contains(@class,'sales')])", $node));
        if ($title) $data[] = [$title, $price, $sales];
    }
    return $data;
}

$keyword = $argv[1] ?? readline('关键词:');
$csv = fopen("1688_html_{$keyword}_" . date('Ymd') . ".csv", 'w');
fputcsv($csv, ['title', 'price', 'sales']);

for ($p = 1; $p <= 3; $p++) {
    $list = searchProducts($keyword, $p);
    foreach ($list as $row) fputcsv($csv, $row);
    echo "Page $p 完成\n";
}
fclose($csv);
echo "已导出 CSV\n";

运行:

$ php alibaba_html.php "女式T恤"
Page 1 完成
Page 2 完成
Page 3 完成
已导出 CSV
注意:HTML 结构随时可能微调,出现字段为空请 var_dump($node->nodeValue) 快速定位新 class。


五、提速 & 稳速:并发 + 重试 + 礼貌


技巧实现效果
并发Guzzle Poolcurl_multi_*60条≈5秒
重试while(--$retry)网络抖动成功率99%
限速usleep(300000)单IP安全
代理CURLOPT_PROXY分布式再+代理


六、三行代码看行情(Excel 透视)

  1. 均价 =AVERAGE(B:B)
  2. 最低地区透视图 → 低价收货
  3. 销量/价格散点图 → 找「高销低价」爆款


七、常见问题(FAQ)

  1. 403/滑块怎么办?→ 降速 + 换 IP + 加 Accept-Language
  2. 官方 API 配额不够?→ 控制台买流量包,或 HTML 版补位
  3. 想抓「库存」「运费」?→ 需进入 offer 详情页再解析一次,或申请 offer.detail 接口
  4. 能商用吗?→ 官方 API 数据含版权,对外展示前阅读《数据使用协议》,必要时签补充条款


八、把脚本升级成「副业现金流」


需求工具成本
定时Linux cron / Win 计划任务0元
通知企业微信机器人 + curl POST0元
前端Streamlit / PHP 自建页0元
订阅知识星球 / 小报童29元/月
已有读者把「1688 行情」做成星球,200 会员 × 50 元 = 月入 1w


九、合规再提醒:只挖公开矿,不碰隐私矿

  1. 不登录、不破解、不存储商业机密
  2. 不公开商家手机号、地址、SKU 级库存
  3. 对外展示请脱敏 offerId 后三位,避免黄牛精准狙击
  4. 商用前阅读《1688 数据使用协议》,必要时购买正式流量包


十、结语:让技术「温柔」地赚钱

今天这篇软文,没有对抗、没有炫技,只有:

  • 官方 API → 低风险、可商用
  • 60 行代码 → 虚拟主机可复制
  • CSV 输出 → Excel 能落地
  • 把脚本丢给 cron,每天一杯咖啡的时间,就能生成一份「1688 行情报告」。
    当别人还在手动滑屏,你已经用 PHP 把 1688 变成了「躺赚」的副业提款机。
请登录后查看

one-Jason 最后编辑于2025-10-08 15:32:44

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}}
沙发 板凳 地板 {{item.floor}}#
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
打赏
已打赏¥{{reward_price}}
63
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

相关推荐

快速安全登录

使用微信扫码登录
{{item.label}} 加精
{{item.label}} {{item.label}} 板块推荐 常见问题 产品动态 精选推荐 首页头条 首页动态 首页推荐
取 消 确 定
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服