最火的国产开源项目是它?

简介: 最火的国产开源项目是它?

打开gitee看看最有价值的开源项目,然后发现排序是这样的。

这我怎么知道那个是最火的,还好我是程序员,主力语言java,必须自己爬一下。

一、导入依赖库

<!--        爬虫库-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.14.3</version>
        </dependency>
<!--        导出excel-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>

二、编写业务代码

导出excel对象

package com.example.demo.util;
 
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
 
 
public class Model  implements Comparable<Model>{
    @ExcelProperty("项目语言")
    @ColumnWidth(20)
    String projectLabels;
    @ExcelProperty(value = "项目标题")
    @ColumnWidth(40)
    String title;
    @ExcelProperty("项目简介")
    @ColumnWidth(60)
    String projectDescription;
    //获取项目starts
    @ExcelProperty("star")
    @ColumnWidth(10)
    Double star;
    //获取项目分支数量
    @ExcelProperty("Fork")
    @ColumnWidth(10)
    Double fork;
    @ExcelProperty("项目图片")
    String imageSrc;
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getImageSrc() {
        return imageSrc;
    }
 
    public void setImageSrc(String imageSrc) {
        this.imageSrc = imageSrc;
    }
 
    public String getProjectDescription() {
        return projectDescription;
    }
 
    public void setProjectDescription(String projectDescription) {
        this.projectDescription = projectDescription;
    }
 
    public String getProjectLabels() {
        return projectLabels;
    }
 
    public void setProjectLabels(String projectLabels) {
        this.projectLabels = projectLabels;
    }
 
    public Double getStar() {
        return star;
    }
 
    public void setStar(Double star) {
        this.star = star;
    }
 
    public Double getFork() {
        return fork;
    }
 
    public void setFork(Double fork) {
        this.fork = fork;
    }
 
    @Override
    public int compareTo(Model o) {
        if(o.star>this.star){
            return 1;
        }else {
            return -1;
        }
    }
}

爬取网页,获取各元素的值

package com.example.demo.util;
 
import com.alibaba.excel.EasyExcel;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
 
public class JsoupTestGitee {
    public static void main(String[] args) throws IOException {
        //    获取目标网页 https://gitee.com/gvp/all
        String url = "https://gitee.com/gvp/all";
        //设置浏览器头部信息
        String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36";
        //获取网页DOM
        Document document = Jsoup.connect(url).userAgent(userAgent).get();
        //获取所有项目子元素
        String parentClass = "ui fluid card project-card categorical-project-card";
        Elements elementsByClass = document.getElementsByClass(parentClass);
        List<Model> res = new ArrayList<>();
        //遍历元素
        elementsByClass.forEach((tem) -> {
            Model mod = new Model();
            //获取项目名称
            String title = "project-name linkable";
            String titleText = tem.getElementsByClass(title).eq(0).text();
            mod.setTitle(titleText);
            //获取项目图标地址
            String avatar = "ui avatar";
            String src = tem.getElementsByClass(avatar).eq(0).attr("src");
            mod.setImageSrc(src);
            //获取项目简介
            String description = "project-description";
            String descriptionText = tem.getElementsByClass(description).eq(0).text();
            mod.setProjectDescription(descriptionText);
            //获取项目语言
            String projectLabels = "project-labels";
            String projectLabelsText = tem.getElementsByClass(projectLabels).eq(0).text();
            mod.setProjectLabels(projectLabelsText);
            //获取项目starts
            String starText = tem.getElementsByClass("linkable meta").eq(0).text();
            mod.setStar(toDouble(starText));
            //获取项目分支数量
            String forkText = tem.getElementsByClass("linkable meta").eq(1).text();
            mod.setFork(toDouble(forkText));
            res.add(mod);
        });
        //生成Excel
        String fileName = System.currentTimeMillis() + ".xlsx";
        //获取的数据按照star排序
        Collections.sort(res);
        //将数据写入到excel中
        EasyExcel.write(fileName, Model.class).sheet("项目").doWrite(res);
 
    }
 
    /**
     * 将1.1K转换为11000
     * @param parm
     * @return
     */
    private static Double toDouble(String parm) {
        Double res=0.0;
        if (parm.contains("K")) {
            int length = parm.length();
            parm = String.valueOf(Double.valueOf(parm.substring(0, length - 1)) * 1000);
        }
        if (parm != null && !Objects.equals(parm, "")) {
            res = Double.valueOf(parm);
        }
        return res;
    }
 
}


三、运行程序

就是它lengleng / pig

相关文章
|
SQL 存储 大数据
Presto全网最佳学习资料汇总
Presto这几年在国内使用的越来越广泛,成为企业中必备的Adhoc/BI报表/轻量级ETL引擎,国内公司比如阿里巴巴、滴滴、头条、京东、小米都有几百数上千台的Presto集群,这主要还是由Presto优秀的特性使然(下文详细说明)。为了方便咱们中国的Presto使用者、爱好者学习使用Presto,我把Presto周边的资料做了一个搜集整理,方便大家查阅。
Presto全网最佳学习资料汇总
|
10月前
|
人工智能 PyTorch API
利用OpenVINO™高效推理MiniCPM4系列模型
面壁智能正式发布端侧MiniCPM 4.0 模型,实现了端侧可落地的系统级软硬件稀疏化的高效创新。
324 0
|
人工智能 程序员 数据库
AI客服会完全替代人工客服吗
本文介绍了AI客服的应用和发展,包括作者亲身搭建AI客服的经历,以及AI客服在提供24小时服务、快速响应客户需求、精准回答问题等方面的优势。文中还提到了构建AI总结助手、客户对话分析和智能导购助手的具体应用场景,展示了AI客服在提高工作效率、降低成本和优化用户体验方面的潜力。最后,文章讨论了AI客服替代人工客服的可能性及其局限性,强调应结合两者优势共同提升服务质量。
|
机器学习/深度学习 监控 算法
【机器学习】提供学习率的直观解释
【5月更文挑战第18天】【机器学习】提供学习率的直观解释
|
弹性计算 运维 安全
阿里云轻量应用服务器是什么?轻量应用服务器产品知识介绍
轻量应用服务器是面向单机应用场景的新一代计算服务,提供精品应用一键部署,支持一站式的域名、网站、安全、运维、应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛。本文为大家介绍阿里云轻量应用服务器的产品优势、应用场景、使用须知、地域与网络连通性、与云服务器ECS的区别。
阿里云轻量应用服务器是什么?轻量应用服务器产品知识介绍
|
SQL 存储 关系型数据库
MySQL修改数据表(ALTER TABLE语句)
MySQL修改数据表(ALTER TABLE语句)
1729 0
无线通信中的重传机制是如何工作的?
无线通信中的重传机制是如何工作的?
920 0
|
存储 Serverless Python
怎么用Python制作一个七夕爱心?
怎么用Python制作一个七夕爱心?
523 0
|
消息中间件 存储 网络协议
RabbitMQ——使用Exchange中的topic交换机实现消息发送和接收
RabbitMQ——使用Exchange中的topic交换机实现消息发送和接收
RabbitMQ——使用Exchange中的topic交换机实现消息发送和接收
|
机器学习/深度学习 传感器 算法
【图像分割】基于遗传算法优化一维最大熵实现图像分割附matlab代码
【图像分割】基于遗传算法优化一维最大熵实现图像分割附matlab代码