在電商數據驅動的時代,商品詳情數據成為市場分析、價格監(jiān)控、競品調研的核心燃料。京東作為國內頭部電商平臺,其商品信息豐富、更新頻繁,是數據開發(fā)者眼中的“香餑餑”。
本文將帶你從0到1,用Java語言實現一個可運行的京東商品爬蟲,不僅能抓取商品標題、價格、圖片、評價數,還能應對常見的反爬策略。全文附完整代碼,復制粘貼即可運行。
一、為什么選擇Java做爬蟲?
雖然Python是爬蟲界的“老大哥”,但Java在企業(yè)級開發(fā)中依舊占據主流,具備以下優(yōu)勢:
- 并發(fā)處理強:利用多線程、線程池、異步IO,可輕松實現高并發(fā)抓?。?/li>
- 生態(tài)成熟:Jsoup、HttpClient、Jackson等庫功能強大;
- 部署方便:可直接打包為JAR,運行在服務器或容器中;
- 與業(yè)務系統(tǒng)無縫集成:采集后可直接入庫、入ES、入Kafka,打通數據閉環(huán)。
二、目標明確:我們要抓什么?
以京東商品詳情頁為例,我們要抓取以下字段:
字段名 | 示例值 |
---|---|
商品標題 | Apple iPhone 15 128G 藍色 |
商品價格 | 5999.00 |
商品圖片 | https://img10.360buyimg.com/... |
店鋪名稱 | 京東自營旗艦店 |
評價數量 | 50000+ |
三、技術選型
模塊 | 技術方案 |
---|---|
頁面下載 | Jsoup / HttpClient |
HTML解析 | Jsoup CSS選擇器 |
JSON解析 | Jackson / Fastjson |
代理與限速 | 動態(tài)代理池 + 隨機延時 |
反爬策略 | 隨機UA、Referer、IP切換 |
四、環(huán)境準備
1. 創(chuàng)建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
}
七、反爬策略與優(yōu)化建議
問題 | 解決方案 |
---|---|
IP被封 | 使用代理池(如阿布云、站大爺) |
UA被識別 | 隨機User-Agent池 |
滑塊驗證碼 | 使用打碼平臺或人工介入 |
接口限流 | 控制頻率,隨機延時(1~3秒) |
簽名接口 | 分析JS加密邏輯,或調用官方API |
八、進階玩法(等你來挑戰(zhàn))
- ? 多線程抓取 + 隊列調度(支持百萬SKU)
- ? 接入Spring Boot + MyBatis,實時入庫
- ? 接入Elasticsearch,實現商品搜索
- ? 接入Kafka,實時流式處理
- ? 可視化展示:Spring Boot + ECharts
九、合法合規(guī)提醒
- ? 禁止抓取用戶隱私信息(如收貨地址、手機號)
- ? 禁止高并發(fā)攻擊京東服務器
- ? 對外商用需獲得京東授權
- ? 建議優(yōu)先使用官方API(open.jd.com)
十、結語
本文從環(huán)境搭建、代碼實現、反爬策略到進階方向,系統(tǒng)講解了如何用Java爬蟲獲取京東商品詳情。希望你不僅能跑通代碼,更能在此基礎上構建自己的數據采集系統(tǒng)。
如果你還想看:
- “如何用Java爬取京東評論并做情感分析”
- “如何用Java爬取京東秒殺庫存”
- “如何用Spring Boot構建爬蟲調度平臺”
- 歡迎留言告訴我,我們下期繼續(xù)!
點贊 + 收藏 + 轉發(fā),你的支持是我持續(xù)輸出的最大動力!