美文网首页
20200708 - 初步使用

20200708 - 初步使用

作者: VChao | 来源:发表于2020-07-08 22:13 被阅读0次

2020/07/08 -

引言

本篇文章我来简单介绍一下怎么利用python来使用这个neo4j,不涉及具体原理,本次只是描述具体的使用过程;从这个过程中再分支出具体的使用过程。
本次我测试的数据是两个,一个是DNS数据,文本内容是host,dns,还没有涉及请求的是什么,因为我想不通这个关系是什么;另外一个数据是网站请求数据,这个数据就稍微多了几列,但核心就是host和网站的内容。那么从这两个数据中,我就是把这个访问的关系给绘制出来,具体挖掘什么信息,比如什么社群发现,我是暂时想不出来这层语义是什么。


本文主要阐述了使用CSV格式的数据,数据中只有两个节点的信息(可以多种,代码自行调整),然后绘制他们的关系。代码运行没问题,但也产生了一些问题,目前待解决:
1)如何添加属性等信息
2)如何批量节点信息
3)我这里是采用去重的方式来实现了插入,但是正确的姿势应该是什么呢?


搭建数据库

这里使用docker的方式进行搭建,一开始选了最新版,在修改密码的界面一直卡着,通过开发者工具的形式,我就发现了原因是他某个请求发完了127.0.0.1,感觉是个bug。所以最后选择了neo4j:3.4。启动命令:

docker run -it -p 7474:7474 -p 7687:7687 neo4j:3.4

其中7474是web的接口,同时看到后面的python的调用方式,估计他是使用httpapi来通信的把。

python库

python库使用的是py2neo,正常安装就好了

全部代码

#! /bin/python2
#coding:utf-8
#Author:VChao
#2020/07/08

from py2neo import Graph, Node, Relationship
#连接数据库
graph = Graph("http://10.245.142.250:7474",username = "neo4j", password = "wangchao")
#删除所有数据
graph.delete_all()
#读取数据
with open("src_dst_ip.csv","r") as f:
    data = f.readlines()

data = map(lambda x: x.strip(), data)
##这里插入数据的方式是先去重,然后对每个IP都建立一个节点,并将这个节点都存入列表中
##读取原始数据的关系,每次都获取出来关系信息,按照ip从前面创建的节点中来加入关系
##因为创建关系的时候,需要利用Node对象作为点
src_ip_list = list(set(map(lambda x: x.strip().split(",")[0], data)))
dst_ip_list = list(set(map(lambda x: x.strip().split(",")[1], data)))
relation_list = list()
src_node_list = []
dst_node_list = []

for one in src_ip_list:
    src_node_list.append(Node("host", name = one))
for one in dst_ip_list:
    dst_node_list.append(Node("dns_server",name = one))
for one in data:
    src_ip, dst_ip = one.split(",")
    src_node = src_node_list[src_ip_list.index(src_ip)]
    dst_node = dst_node_list[dst_ip_list.index(dst_ip)]
    r = Relationship(src_node, "query", dst_node)
    #在数据库创建这个东西,注意看这里是两个节点和一个关系一起创建的
    s = src_node | dst_node | r
    graph.create(s)

代码分析

  1. 创建节点Node
    Node("host", name = one),这个代码中,第一个参数是Label的信息,第二个是name。相当于create (host|one),这样的语句。虽然两个节点对象都是这种创建方式,但是插入的两种类型,只有一个默认按照name来显示节点,不过可以在界面选择不显示的点,设置让他显示这个名字。不过我暂时还没找到其他的一些关于这个节点属性的插入方式,这个后面解决一下。

  2. 创建关系
    没什么多说的,Relationship(src_node, "realation label", dst_node)。最后的graph.create(s)节点有点意思,这个意思是批量创建吗?还是说必须是这种存在关系的三个变量。而且这里有一个问题我还是没注意到的,就是实际上某个节点可能已经创建好了,这种情况是怎么处理的,可能要看这个API来解决了。

  3. 节点的重复性
    一开始的时候,我对他这个节点的属性和其他的东西理解的不清楚,以为这些都是唯一的,但是测试过程中发现如果我执行两次同样的插入命令,结果会出现两个节点;这两个节点信息都是一样的, 只有id不一样,可以从界面上看到这个信息。所以,这才产生了前面先去重然后将这个列表存起来的方式。不知道是不是还有别的方式。

相关文章

  • 20200708 - 初步使用

    2020/07/08 - 引言 本篇文章我来简单介绍一下怎么利用python来使用这个neo4j,不涉及具体原理,...

  • 20200708

    1982年12月,我县经上级批准,建立了15个公社(厂,矿)派出所,他们是红旗,巡检,杨河,三合,郎君,黄滩,天鹅...

  • 20200708

    这周的科研时间为17节课,加上1节课学Latex,2节课学科研方法论。上周为14节课,有进步。 后面要更细记录仿真...

  • 20200708

    当知道自己即将进行虚伪关心时,一定要做好功课,关心到位,可千万别半路说错话出了岔子。

  • 20200708

    今晚又加班到十点,今天领导发话了要至少加班到八点半,加班节奏要搞起来了。今天另外一件事就是产品经理评级演讲,对着P...

  • 20200708

    困。索性睡去。被蚊子咬醒,再无睡意。看时间,刚刚过去了一个小时。这昏昏沉沉的一个小时啊,踏实安稳,无知无觉,...

  • 20200708

    一觉醒来6点多了,第一个动作打开支付宝看看昨天的基金收入妥妥的幸福感袭来~ 把家里的水果带给同事们吃,表达一下平时...

  • 20200708

    11:00 出门 11:30~14:30 加资源 14:40~16:30 休息吃饭 17:00 加资源 目标:30...

  • ChIPpeakAnno 注释peak

    # 1. 初步使用 运行下面几行代码,初步了解ChIPpeakAnno使用 # 1. 详细例子 ChIPpeakA...

  • 200707领读-职业发展底层逻辑-第一周

    【20200708】-李尤领读 一、结合个人经历的导读课回顾 如何做好我们的个人发展,即怎么在个人身上使用车日路模...

网友评论

      本文标题:20200708 - 初步使用

      本文链接:https://www.haomeiwen.com/subject/xpohcktx.html