当前位置: 首页 > news >正文

Java爬虫1688详情api接口实战解析

下面给出一份可直接落地的「Java 版 1688 商品详情 API 爬虫」完整示例,覆盖签名算法、HTTP 调用、JSON 解析、异常重试、频率控制等关键要点,复制即可运行。
(注:1688 接口需企业认证并申请 AppKey / AppSecret,以下代码以官方 REST 网关item_get为例,也可平替为第三方代理网关,只需换域名即可 。)


一、Maven 依赖

<dependencies> <!-- HTTP --> <dependency> <groupId>org.apache.httpcomponents.client5</groupId> <artifactId>httpclient5</artifactId> <version>5.3.1</version> </dependency> <!-- JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.17.0</version> </dependency> </dependencies>

二、签名工具(1688 官方 MD5 签名规则)

public class SignUtil { public static String sign(TreeMap<String, String> params, String appSecret) { StringBuilder sb = new StringBuilder(appSecret); for (Map.Entry<String, String> e : params.entrySet()) { sb.append(e.getKey()).append(e.getValue()); } sb.append(appSecret); return md5(sb.toString()).toUpperCase(); } private static String md5(String raw) { try { byte[] bs = MessageDigest.getInstance("MD5").digest(raw.getBytes(StandardCharsets.UTF_8)); StringBuilder hex = new StringBuilder(); for (byte b : bs) hex.append(String.format("%02X", b & 0xFF)); return hex.toString(); } catch (Exception e) { throw new RuntimeException(e); } } }

三、统一入口 ——ItemGetService

public class ItemGetService { private static final String GATEWAY = "https://api.1688.com/router/rest"; private final String appKey; private final String appSecret; private final CloseableHttpClient http; public ItemGetService(String appKey, String appSecret) { this.appKey = appKey; this.appSecret = appSecret; this.http = HttpClients.custom() .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create() .setMaxConnTotal(50).setMaxConnPerRoute(10).build()) .build(); } /** 获取商品详情(自动重试 3 次) */ public ItemDO getItem(long numIid) throws IOException { TreeMap<String, String> params = new TreeMap<>(); params.put("method", "item_get"); params.put("app_key", appKey); params.put("timestamp", String.valueOf(System.currentTimeMillis())); params.put("num_iid", String.valueOf(numIid)); params.put("v", "2.0"); params.put("sign_method", "md5"); params.put("format", "json"); params.put("sign", SignUtil.sign(params, appSecret)); String url = GATEWAY + "?" + URLEncodedUtils.format( params.entrySet().stream() .map(e -> new BasicNameValuePair(e.getKey(), e.getValue())) .collect(Collectors.toList()), StandardCharsets.UTF_8); for (int i = 0; i < 3; i++) { try (CloseableHttpResponse resp = http.execute(new HttpGet(url))) { if (resp.getCode() == 200) { JsonNode root = new ObjectMapper().readTree(EntityUtils.toString(resp.getEntity())); if ("0".equals(root.get("code").asText())) { return new ObjectMapper().convertValue(root.get("item"), ItemDO.class); } throw new IllegalStateException("API 业务错误: " + root.get("msg").asText()); } } catch (Exception e) { if (i == 2) throw e; try { Thread.sleep(1000); } catch (InterruptedException ignore) {} } } throw new RuntimeException("重试 3 次仍失败"); } @Data // lombok public static class ItemDO { private String title; private BigDecimal price; private Integer num; // 库存 private String picUrl; private List<Sku> skus; } public void shutdown() throws IOException { http.close(); } }

四、频率控制 + 批量调用示例

public class CrawlerBoot { public static void main(String[] args) throws Exception { ItemGetService api = new ItemGetService("你的AppKey", "你的AppSecret"); List<Long> numIids = List.of(610947572360L, 623456789012L); // 商品ID池 for (Long id : numIids) { ItemGetService.ItemDO item = api.getItem(id); System.out.printf("标题=%s 价格=%s 库存=%d%n", item.getTitle(), item.getPrice(), item.getNum()); Thread.sleep(350); // 约 3 次/秒,低于官方 5 次/秒限制 } api.shutdown(); } }

五、常见坑 & 优化建议

  1. 签名顺序必须TreeMap升序,否则 4005 授权失败。

  2. 免费账号每日调用上限 1 万次,超出需购买套餐;峰值时段做好限流与重试。

  3. 如需 SKU 图、阶梯价、近 30 天销量,需在参数额外指定fields=skus,priceRange,saleInfo

  4. 若走第三方代理网关(如api-gw.onebound.cn),签名规则不变,仅换域名即可。

  5. 数据落库时建议用ON DUPLICATE KEY UPDATE做幂等,避免重复写入。


六、一句话总结
以上代码即为“Java 爬虫 1688 详情 API 接口”的最小可运行骨架,已帮你屏蔽掉签名、编码、重试、频率等所有细节,直接填上自己的 AppKey / Secret 即可把 1688 商品库变成本地数据表

http://www.jsqmd.com/news/110955/

相关文章:

  • Ramile终极指南:5分钟搞定软件著作权代码提取
  • vue 甘特图 vxe-gantt table 依赖线的使用,配置连接线
  • OpenCV(二十七):中值滤波 - 详解
  • 2025十大私藏图库!旅游金融大数据等行业高清素材图库推荐 - 品牌2026
  • 5分钟搞定Python控制Android设备:py-scrcpy-client实战指南
  • 突破性能瓶颈:iStoreOS系统加速实战指南
  • 打印等边三角形
  • 2025年获客系统品牌排行榜,有了它商机线索不用愁 - 品牌策略主理人
  • KOReader完整指南:如何在Kindle等设备上打造完美的电子书阅读体验
  • 昂瑞微推出了面向移动电源行业的一站式智能方案-OM70201MV
  • 【题解】Luogu P10289 [GESP样题 八级] 小杨的旅游
  • 2025 年最新炭化机 / 炭化炉 / 炭化设备厂家实力推荐 TOP5 - 深度智识库
  • 解决jenkins无法启动tomcat问题
  • AI 训练素材、数据集供应商推荐:图片视频数据选哪家? - 品牌2026
  • 2025年12月矿物铸件的头部企业推荐榜:南通盟鼎新材料五星闪耀,减振赋能精度,这些企业领跑装备升级 - 海棠依旧大
  • 最新发布!2025年国内实心钢棒现货厂家TOP5榜单,实心钢棒/不锈钢无缝实心钢棒生产加工怎么选择 - 品牌推荐师
  • 2025年12月U型科氏质量流量计企业推荐:大连美天测控、三角型科氏质量流量计、微弯型科氏质量流量计、直管型科氏质量流量计、科氏质量流量计推荐指南 - 海棠依旧大
  • 国内混合机品牌五大佼佼者出炉!揭秘这些混合设备工厂的硬核实力 - 速递信息
  • golang的defer 深坑
  • 群晖DSM系统入门:新手必看的10个设置
  • Day33分辨率与视口与二倍图使用方法
  • 2025年12月切片蜡块柜推荐榜:密集型/高容量密集型/智能/病理/防潮防腐/多层抽屉式/实验室/切片蜡块柜,安全高效存储新标杆,北京中宝元五星领跑实验室装备市场 - 海棠依旧大
  • 2025义乌净化工程服务商推荐榜:聚焦洁净车间与实验室一站式解决方案 - 呼呼拉呼
  • 2025 十大商用素材网站:高清图片购买及正版图库推荐 - 品牌2026
  • 2025 宝藏十大图库!自媒体、小红书、公众号配图必备 - 品牌2026
  • C++学习笔记 23 宏 Macro
  • FireFox 配置
  • 2025年12月医用电梯安装,观光电梯安装,家用电梯安装公司推荐:行业测评与选择指南 - 品牌鉴赏师
  • 2025年12月发膜品牌推荐榜:8秒液体/蛋白/修护/发膜,玛丝兰领衔修护新标杆,从发芯强韧开始,让枯发重获新生 - 海棠依旧大
  • 2025年12月洁净无氧烘箱厂家新标杆:德菲瑞斯高真空无氧烘箱、HMDS 无氧烘箱、真空无氧烘箱、充氮无氧烘箱、高温无氧烘箱、HMDS真空无氧烘箱、精准控温更可靠 - 海棠依旧大