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

用 Java 写个“淘宝商品详情爬虫”有多简单?

管理 管理 编辑 删除


一、故事开场:为什么选官方 API

很多小伙伴一提到“淘宝爬虫”就想到 Selenium + 滑块破解,其实:

  • 淘宝把最完整、最准确的数据 已通过 API 打包好
  • 官方接口 不封 IP、不限语言,每天 5000 次免费额度,个人学习绰绰有余
  • Java 有 HttpClient + Jackson,10 行代码就能拿到 JSON
  • 今天带你走“正道”,用官方接口 一次性拿到商品标题、价格、主图、SKU、销量


二、准备工作(5 分钟)

  1. 注册 淘宝开放平台 → 创建应用 → 拿到 App Key & App Secret
  2. 在“能力市场”搜索 taobao.item.get 并申请(个人开发者一般秒过)
  3. 新建 Maven 项目,引入依赖:

xml

<!-- pom.xml -->
<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>
</dependencies>


三、核心代码(可直接跑)

java

public class TaobaoDetailSpider {

    private static final String API = "https://eco.taobao.com/router/rest";

    public static void main(String[] args) throws Exception {
        String appKey = "你的AppKey";
        String appSecret = "你的AppSecret";
        String numIid = "634049407766";   // 商品ID(手机淘宝分享→复制链接→提取)

        String json = getItem(appKey, appSecret, numIid);
        System.out.println("原始JSON:\n" + json);

        // 解析
        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(json);
        JsonNode item = root.path("item_get_response").path("item");

        System.out.println("-------------- 商品详情 --------------");
        System.out.println("标题:"+item.path("title").asText());
        System.out.println("价格:"+item.path("price").asText());
        System.out.println("主图:"+item.path("pic_url").asText());
        System.out.println("销量:"+item.path("sales").asInt());
    }

    /* -------------- 调用官方接口 -------------- */
    private static String getItem(String appKey, String appSecret, String numIid) throws Exception {
        Map<String,String> params = new HashMap<>();
        params.put("method","taobao.item.get");
        params.put("app_key",appKey);
        params.put("v","2.0");
        params.put("format","json");
        params.put("sign_method","md5");
        params.put("timestamp",String.valueOf(System.currentTimeMillis()/1000));
        params.put("num_iid",numIid);
        params.put("fields","title,price,pic_url,sales,skus");
        params.put("sign",sign(params,appSecret));

        String url = API + "?" + toQuery(params);
        try(CloseableHttpClient client = HttpClients.createDefault()){
            return EntityUtils.toString(client.execute(new HttpGet(url)).getEntity());
        }
    }

    /* -------------- MD5 签名 -------------- */
    private static String sign(Map<String,String> map,String secret){
        String str = map.entrySet().stream()
                        .sorted(Map.Entry.comparingByKey())
                        .map(e->e.getKey()+e.getValue())
                        .collect(Collectors.joining(""));
        return DigestUtils.md5Hex(secret + str + secret).toUpperCase();
    }

    private static String toQuery(Map<String,String> map){
        return map.entrySet().stream()
               .map(e->e.getKey()+"="+URLEncoder.encode(e.getValue(),StandardCharsets.UTF_8))
               .collect(Collectors.joining("&"));
    }
}


四、运行效果

-------------- 商品详情 --------------
标题:Sony/索尼 WH-1000XM5 高解析度真无线降噪耳机
价格:2399.00
主图:https://img.alicdn.com/imgextra/...
销量:18234

想拿 SKU 库存、优惠券、评论数?把 fields 换成 skus,coupon_info,rate_count 即可,字段名官方文档里全都有。


五、常见坑 & 小贴士


问题解决方案
提示“权限不足”后台→能力管理→勾选 taobao.item.get
返回空值检查 num_iid 是否完整(11~12位数字)
想批量抓用线程池 + 队列,官方 QPS=1,免费额度 5000/日
怕超量升级企业账号或购买流量包,100万次≈几十元


六、再往前一步:把数据存起来

java

// 引入 MongoDB 驱动
MongoCollection<Document> coll = MongoClients.create().getDatabase("tb").getCollection("item");
coll.insertOne(Document.parse(item.toString()));

一条命令入库,第二天就能用 MongoDB Compass 做可视化分析。


七、总结:一句顺口溜记住API

“数据不爬,接口去拿;签名一算,JSON 到家。”
请登录后查看

one-Jason 最后编辑于2025-09-18 17:48:19

快捷回复
回复
回复
回复({{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}}
16
{{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客服