日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java代码】京东商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+爬虫源代码)包含csv和sql格式数据下载可用

發布時間:2024/10/6 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java代码】京东商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+爬虫源代码)包含csv和sql格式数据下载可用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【資源鏈接】

鏈接:https://pan.baidu.com/s/15fuerPIQgmwV1MZEts8jEQ
提取碼:6psl

【包含文件】

1.說明

當前項目需要用到商品分類數據,在網上查了淘寶和京東的首頁,京東 https://www.jd.com/allSort.aspx 的數據更容易獲取。

2.實現

2.1 建表語句

項目用的是GreenPlum數據庫,其他類型的數據庫建表小伙伴兒們自己動手啊 😄

-- 建表 CREATE TABLE "data_commodity_classification" ( "id" VARCHAR ( 32 ), "parent_id" VARCHAR ( 32 ), "level" int2, "name" VARCHAR ( 64 ), "merger_name" VARCHAR ( 255 ) ); -- 注釋 COMMENT ON TABLE "data_commodity_classification" IS '3級商品分類數據表'; COMMENT ON COLUMN "data_commodity_classification"."level" IS '類別等級'; COMMENT ON COLUMN "data_commodity_classification"."name" IS '商品分類'; COMMENT ON COLUMN "data_commodity_classification"."merger_name" IS '商品類別組合名';

2.2 Jar包依賴

jsoup是必須的,項目使用了mybatis-plus在保存對象時可以調用.saveBatch()方法,不是必須的。

<!--不用糾結于版本--> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version> </dependency> <!--不是必須的--> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.0</version> </dependency>

2.3 對象封裝

用了lombok為的是在構建對象時用builder來簡化代碼:

@Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value="DataCommodityClassification對象", description="") @Builder public class DataCommodityClassification implements Serializable {private static final long serialVersionUID=1L;private String id;private String parentId;@ApiModelProperty(value = "類別等級")private Integer level;@ApiModelProperty(value = "商品分類")private String name;@ApiModelProperty(value = "商品類別組合名")private String mergerName; }

2.4 爬蟲源代碼

html 頁面標簽:

數據獲取邏輯:清除歷史數據 > 爬取最新數據并封裝 > 保存最新數據。

public boolean getCommodityClassificationData() throws IOException {// 首先清除歷史數據LambdaQueryWrapper<DataCommodityClassification> lambdaQuery = Wrappers.lambdaQuery(DataCommodityClassification.class);dataCommodityClassificationService.remove(lambdaQuery);// 處理樹結構ID【隨手就寫了 不知道有沒有更好的方法】AtomicInteger atomicIntegerOne = new AtomicInteger();AtomicInteger atomicIntegerTwo = new AtomicInteger();AtomicInteger atomicIntegerThree = new AtomicInteger();// 結果數據List<DataCommodityClassification> dataCommodityClassificationList = new ArrayList<>();// ************* 以下是爬蟲代碼 *************// 地址信息String url = "https://www.jd.com/allSort.aspx";Document document = Jsoup.parse(new URL(url), 300000);// 獲取包含所有分類數據的根元素Element root = document.getElementsByClass("category-items clearfix").get(0);// 獲取一級分類標簽數據Elements levelOne = root.getElementsByClass("category-item m");levelOne.forEach(one -> {String levelOneData = one.getElementsByClass("item-title").get(0).child(2).text();String oneId = "" + atomicIntegerOne.getAndIncrement();dataCommodityClassificationList.add(DataCommodityClassification.builder().id(oneId).parentId(null).level(0).name(levelOneData).build());// 獲取二級分類標簽數據Elements levelTwo = one.getElementsByClass("items").get(0).getElementsByTag("dl");levelTwo.forEach(two -> {String levelTwoData = two.getElementsByTag("dt").text();String twoId = oneId + atomicIntegerTwo.getAndIncrement();String mergerNameTwo = levelOneData + "," + levelTwoData;dataCommodityClassificationList.add(DataCommodityClassification.builder().id(twoId).parentId(oneId).level(1).name(levelTwoData).mergerName(mergerNameTwo).build());// 獲取三級級分類標簽數據Elements levelThree = two.getElementsByTag("dd").get(0).children();levelThree.forEach(three -> {// 獲取三級分類信息String levelThreeData = three.text();String threeId = twoId + atomicIntegerThree.getAndIncrement();String mergerNameThree = mergerNameTwo + "," + levelThreeData;dataCommodityClassificationList.add(DataCommodityClassification.builder().id(threeId).parentId(twoId).level(2).name(levelThreeData).mergerName(mergerNameThree).build());});});});// 保存最新數據boolean isSaveSuccess = dataCommodityClassificationService.saveBatch(dataCommodityClassificationList);return isSaveSuccess;}

3.結果

一級分類的parent_id和merger_name沒有進行處理,不知道在業務使用的過程中有沒有問題。


提供了csv和sql格式的數據,爬取日期是20220310,需要最新數據的話就需要小伙伴兒們運行爬蟲代碼獲取了。

總結

以上是生活随笔為你收集整理的【Java代码】京东商品全部分类数据获取(建表语句+Jar包依赖+树结构封装+爬虫源代码)包含csv和sql格式数据下载可用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。