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

从0到1:用Java爬虫优雅地获取京东商品详情(附完整代码)

管理 管理 编辑 删除

在电商数据驱动的时代,商品详情数据成为市场分析、价格监控、竞品调研的核心燃料。京东作为国内头部电商平台,其商品信息丰富、更新频繁,是数据开发者眼中的“香饽饽”。

本文将带你从0到1,用Java语言实现一个可运行的京东商品爬虫,不仅能抓取商品标题、价格、图片、评价数,还能应对常见的反爬策略。全文附完整代码,复制粘贴即可运行



一、为什么选择Java做爬虫?

虽然Python是爬虫界的“老大哥”,但Java在企业级开发中依旧占据主流,具备以下优势:

  • 并发处理强:利用多线程、线程池、异步IO,可轻松实现高并发抓取;
  • 生态成熟:Jsoup、HttpClient、Jackson等库功能强大;
  • 部署方便:可直接打包为JAR,运行在服务器或容器中;
  • 与业务系统无缝集成:采集后可直接入库、入ES、入Kafka,打通数据闭环。


二、目标明确:我们要抓什么?

以京东商品详情页为例,我们要抓取以下字段:

字段名示例值
商品标题Apple iPhone 15 128G 蓝色
商品价格5999.00
商品图片https://img10.360buyimg.com/...
店铺名称京东自营旗舰店
评价数量50000+


三、技术选型


模块技术方案
页面下载Jsoup / HttpClient
HTML解析Jsoup CSS选择器
JSON解析Jackson / Fastjson
代理与限速动态代理池 + 随机延时
反爬策略随机UA、Referer、IP切换


四、环境准备

1. 创建Maven项目

bash

mvn archetype:generate -DgroupId=com.jd.crawler -DartifactId=jd-crawler

2. 引入依赖(pom.xml

xml

<dependencies>
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.17.2</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson2</artifactId>
        <version>2.0.42</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.14</version>
    </dependency>
</dependencies>


五、核心代码实现

1. 下载商品详情页

java

public class HttpUtils {
    public static String getHtml(String url) throws IOException {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet request = new HttpGet(url);
        request.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
        request.setHeader("Referer", "https://search.jd.com/");
        CloseableHttpResponse response = client.execute(request);
        return EntityUtils.toString(response.getEntity());
    }
}


2. 解析商品详情

java

public class JDProductParser {
    public static Product parse(String skuId) throws IOException {
        String url = "https://item.jd.com/" + skuId + ".html";
        Document doc = Jsoup.connect(url)
                .userAgent("Mozilla/5.0")
                .header("Referer", "https://search.jd.com/")
                .get();

        String title = doc.select("div.sku-name").text().trim();
        String shop = doc.select("div.J-hove-wrap .name").text();
        String img = doc.select("img#spec-img").attr("src");
        if (!img.startsWith("http")) img = "https:" + img;

        // 获取价格(异步接口)
        String priceUrl = "https://p.3.cn/prices/mgets?skuIds=J_" + skuId;
        String priceJson = HttpUtils.getHtml(priceUrl);
        String price = JSON.parseArray(priceJson).getJSONObject(0).getString("p");

        // 获取评价数
        String commentUrl = "https://club.jd.com/comment/productCommentSummaries.action?referenceIds=" + skuId;
        String commentJson = HttpUtils.getHtml(commentUrl);
        int commentCount = JSON.parseObject(commentJson)
                .getJSONArray("CommentsCount")
                .getJSONObject(0)
                .getIntValue("CommentCount");

        return new Product(skuId, title, price, img, shop, commentCount);
    }
}


3. 商品实体类

java

@Data
@AllArgsConstructor
public class Product {
    private String skuId;
    private String title;
    private String price;
    private String image;
    private String shop;
    private int commentCount;
}


4. 启动类

java

public class CrawlerApp {
    public static void main(String[] args) throws IOException {
        String skuId = "100035288046"; // iPhone 15
        Product product = JDProductParser.parse(skuId);
        System.out.println(JSON.toJSONString(product, true));
    }
}


六、运行效果(控制台输出)

JSON

{
  "skuId": "100035288046",
  "title": "Apple iPhone 15 128G 蓝色",
  "price": "5999.00",
  "image": "https://img10.360buyimg.com/n1/s450x450_jfs/t1/123456.jpg",
  "shop": "京东自营旗舰店",
  "commentCount": 50000
}


七、反爬策略与优化建议


问题解决方案
IP被封使用代理池(如阿布云、站大爷)
UA被识别随机User-Agent池
滑块验证码使用打码平台或人工介入
接口限流控制频率,随机延时(1~3秒)
签名接口分析JS加密逻辑,或调用官方API


八、进阶玩法(等你来挑战)

  • ✅ 多线程抓取 + 队列调度(支持百万SKU)
  • ✅ 接入Spring Boot + MyBatis,实时入库
  • ✅ 接入Elasticsearch,实现商品搜索
  • ✅ 接入Kafka,实时流式处理
  • ✅ 可视化展示:Spring Boot + ECharts


九、合法合规提醒

  • ✅ 禁止抓取用户隐私信息(如收货地址、手机号)
  • ✅ 禁止高并发攻击京东服务器
  • ✅ 对外商用需获得京东授权
  • ✅ 建议优先使用官方API(open.jd.com)


十、结语

本文从环境搭建、代码实现、反爬策略到进阶方向,系统讲解了如何用Java爬虫获取京东商品详情。希望你不仅能跑通代码,更能在此基础上构建自己的数据采集系统

如果你还想看:
  • “如何用Java爬取京东评论并做情感分析”
  • “如何用Java爬取京东秒杀库存”
  • “如何用Spring Boot构建爬虫调度平台”
  • 欢迎留言告诉我,我们下期继续!

点赞 + 收藏 + 转发,你的支持是我持续输出的最大动力!

请登录后查看

one-Jason 最后编辑于2025-09-23 16:19:34

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