目录
目录README.md

openEuler_package_miner

1.总体介绍

​ 本项目总体实现的是从openEuler软件包仓库(src-openEuler: openEuler is an open source platform developed and operated by OpenAtom Foundation. Its unified and open OS supports multiple processor architectures, helping promote a more robust software and hardware ecosystem through joint efforts of the community. (gitee.com))爬取软件包基本数据及其依赖项,且还包含了软件包仓库的基本信息,维护人员信息,commit、issue等。并从openEuler官网发布的CVE SUPPORT中获取相关的漏洞信息,统一存储至Neo4j图数据库中的完整流程。main.py是整个程序的执行流程,通过该文件可以完成以上的整个过程。

2.具体模块介绍

main.py

整个程序的入口,可完整执行从收集数据到存储数据的过程

输入:本文件的没有需要的输入,直接运行即可。(唯一需要输入的是爬取的openEuler仓库页数,为了获取全面的数据,默认全部爬取,不再main.py中另外输入参数进行设置)。

输出:爬取的信息都有本地存储,数据量较小的包节点相关数据以csv格式存储,数据量较大的repo信息、commit信息、issue信息、developer信息、CVE信息等以json存储,除此之外图数据库中存储了相关的信息。

package_crawler.py

爬取openEuler软件包仓库的软件包基本信息和软件包间的依赖信息(buildrequire和require),并进行本地存储

该模块提供了以下几个函数:

  • crawl_package_info ( page ):该函数的作用是获取软件包仓库中包的基本信息(包括包名,简介,仓库是否开放),存储在本地csv文件。参数为page,page为需要爬取的软件包仓库页数。
  • crawl_package_spec ( name ):该函数的作用是获取软件包仓库的配置文件信息,存储在本地csv文件。参数为name,name为需要爬取的仓库名称。

readcsv.py

读取本地csv的操作,包括读取包名和解析依赖项等操作

该模块提供了以下几个函数:

  • read_package_name ( filename ) :该函数从package.csv中获取包的名称,存储在data里,用于进一步进行仓库的爬取。参数是filename,默认值是package.csv,返回值是一个包名的list。
  • read_spec ( ) :该函数通过之前爬取的openEuler软件包仓库的spec文件得到了spec.csv,针对其内容进行解析,主要是对字符串进行正则表达式的操作,将依赖项分开,存储到buildrequire和require两个csv文件中。无参数。

repo_crawler.py

爬取openEuler仓库repo信息,包括基本信息、commit信息、issue信息等,并进行本地存储

该模块提供了以下几个函数:

  • get_repo_detail ( pkg_name ):该函数的作用是通过软件包名称(同样为仓库名称)和相应的api获取仓库详细信息。参数为pkg_name,为软件包名称的list列表。
  • get_repo_commits ( pkg_name ) :该函数的作用是通过软件包名称(同样为仓库名称)和相应的api获取仓库的commit信息。参数为pkg_name,为软件包名称的list列表。
  • get_repo_issues ( pkg_name ) :该函数的作用是通过软件包名称(同样为仓库名称)和相应的api获取仓库的issue信息。参数为pkg_name,为软件包名称的list列表。

user_crawler.py

从openEuler软件包仓库的页面爬取仓库的贡献者(作为项目中的developer)信息

该模块比较复杂,由于Gitee 仓库相关的API获取到的contributor信息较少,所以重新设计爬虫爬取了贡献者的名称,再通过名称进行API获取用户信息。但由于API获取到的用户信息缺失了邮箱等重要信息,所以需要结合仓库API获取的信息进行整合。整合的过程中还需要比对贡献者的commit数量来确定邮箱和用户的对应。该过程实现比较复杂,所以有些函数在此略过。重点几个函数如下:

  • get_user_name ( pkg_name ):该函数根据仓库信息爬取contributor的用户名。参数为pkg_name,为软件包名称。
  • get_user_email ( pkg_name ):该函数通过API获取仓库的贡献者邮箱。参数为pkg_name,为软件包名称。
  • get_user_info ( names , pkg , emails ):该函数的作用是根据用户名以及Gitee API获取用户信息,并与邮箱信息进行整合处理,使得用户信息更加完善。(整合的过程中还需要比对贡献者的commit数量来确定邮箱和用户的对应)

database.py

将所有的数据进行Neo4j图数据库存储的过程

该模块使用了py2neo库Database类创建一个图数据库对象进行操作,其中的几个方法如下:

  • add_repos ( self ) :该方法将仓库信息存入图数据库中,无参数。
  • add_commits ( self )、add_issues ( self ) 、add_developer ( self ) 、add_vulnerability ( self ) 、add_package ( self ) 分别为添加相应的信息
  • add_require、add_buildrequire、add_rel_repo_pkg为添加相应的关系

CVE.json

存储了openEuler官网的CVE数据,与openEuler软件包进行了关联,此数据用于导入数据库中的vulnerability节点

关于

openEuler软件包依赖关系整理

34.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号