栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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()方法,不是必须的。


	org.jsoup
	jsoup
	1.10.2



	com.baomidou
	mybatis-plus-boot-starter
	3.3.0

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 lambdaQuery = Wrappers.lambdaQuery(DataCommodityClassification.class);
        dataCommodityClassificationService.remove(lambdaQuery);

        // 处理树结构ID【随手就写了 不知道有没有更好的方法】
        AtomicInteger atomicIntegerOne = new AtomicInteger();
        AtomicInteger atomicIntegerTwo = new AtomicInteger();
        AtomicInteger atomicIntegerThree = new AtomicInteger();

        // 结果数据
        List 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,需要最新数据的话就需要小伙伴儿们运行爬虫代码获取了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/758733.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号