在一个图中包含两种基本的数据类型:Nodes**(节点)** 和 Relationships**(关系)。Nodes** 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义的关系相连起来,形成关系型网络结构。
性能
NebulaGraph:针对大型数据集设计,以实现快速查询执行。
Neo4j:提供良好的性能,尤其适用于较小的数据集。然而,在非常大型图的情况下,可能不如 NebulaGraph 高效。
查询语言
NebulaGraph::使用 nGQL 的查询语言,基于 openCypher。nGQL类似于 SQL,但专门设计用于图数据库。它提供了一组丰富的功能用于遍历和分析图形数据。
Neo4j:使用 Cypher 的查询语言,同样是一种专门用于图的语言。
class Neo4JSpiderPipeline:
def __init__(self):
# 连接neo4j
self.gdb = GraphDatabase.driver(
'bolt://localhost:7687', auth=('neo4j', '123456'))
try:
with self.gdb.session() as session:
session.write_transaction(self.unique_url)
except:
pass
def close(self):
self.gdb.close()
@staticmethod
def unique_url(tx):
tx.run("CREATE CONSTRAINT ON (page:Page)"
"ASSERT page.url IS UNIQUE")
def create(self, item):
with self.gdb.session() as session:
session.write_transaction(self._create, item)
@staticmethod
def _create(tx, item):
tx.run("CREATE (page:Page) "
"SET page.url=$url,"
"page.title=$title,"
"page.description=$description,"
"page.keywords=$keywords,"
"page.content=$content "
"RETURN page.url, page.title", **item)
if item['from']:
tx.run("MATCH (srcPage:Page {url:$from_}), (newPage:Page {url:$url})"
"CREATE (srcPage)-[to:To]->(newPage)", from_=item['from'], url=item['url'])
def process_item(self, item, spider):
try:
self.create(item)
except Exception as e:
spider.logger.error(e)
else:
spider.logger.info(item['title'])
return
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注.
1. 安装Python3.7.3
2. pip换源
windows:
直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下
[global]
index-url =
3. 安装依赖包
进入项目处,打开控制台,执行
pip install -r requirements.txt
命令,等待下载安装完毕
4. 下载docker windows版
5. 在docker中执行以下命令,以启动neo4j容器:
docker run -p7474:7474 -p7687:7687 -e NEO4J_AUTH=neo4j/123456 neo4j
6. 启动爬虫
进入项目处,打开控制台,执行
scrapy crawl hao123
7. 启动网页服务器
进入项目处,打开控制台,执行
python manage.py runserver
然后浏览器打开链接即可
http://127.0.0.1:8000/