品牌网站有哪些内容百度网站流量统计
半结构化知识抽取是指从半结构化数据源(如HTML、XML、JSON等)中提取有用的信息,并将其转换为更易于理解和使用的知识形式。半结构化数据通常包含一些结构化的标记或标签,但不像完全结构化的数据那样严格。
比如抽取如下网页到neo
<!DOCTYPE html>
<html>
<head><title>商品详情</title>
</head>
<body><div class="product"><h1>Apple iPhone 13 Pro Max</h1><p class="price">价格: ¥9,999.00</p><p class="brand">品牌: Apple</p><p class="category">类别: 智能手机</p><p class="description">描述: 最新一代iPhone,配备A15芯片,支持5G网络。</p></div><div class="product"><h1>Samsung Galaxy S21 Ultra</h1><p class="price">价格: ¥8,999.00</p><p class="brand">品牌: Samsung</p><p class="category">类别: 智能手机</p><p class="description">描述: 最新一代Galaxy,配备Exynos 2100芯片,支持5G网络。</p></div>
</body>
</html>
代码
import requests
from bs4 import BeautifulSoup
from py2neo import Graph, Node, Relationship# 获取网页内容
#url ="http://example.com/products.html" # 替换为实际的URL
#response = requests.get(url)
#html_content = response.content# 打开本地文件
# 打开并读取本地文件
with open('product.html', 'r', encoding='utf-8') as file:html_content = file.read()# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'html.parser')# 提取所有商品信息
products = []
for product_div in soup.find_all('div', class_='product'):product_name = product_div.find('h1').text.strip()price = product_div.find('p', class_='price').text.replace('价格: ', '').replace('¥', '').strip()brand = product_div.find('p', class_='brand').text.replace('品牌: ', '').strip()category = product_div.find('p', class_='category').text.replace('类别: ', '').strip()description = product_div.find('p', class_='description').text.replace('描述: ', '').strip()product_info = {'name': product_name,'price': float(price.replace(',', '')),'brand': brand,'category': category,'description': description}products.append(product_info)# 连接到Neo4j数据库
neo4j_graph = Graph("bolt://localhost:7687", auth=("neo4j", "swpu@swpu"))# 清除已有数据(可选)
neo4j_graph.run("MATCH (n) DETACH DELETE n")# 定义节点和关系标签
PRODUCT_LABEL = "Product"
BRAND_LABEL = "Brand"
CATEGORY_LABEL = "Category"# 创建节点和关系
for product_info in products:# 创建商品节点product_node = Node(PRODUCT_LABEL, name=product_info['name'], price=product_info['price'],description=product_info['description'])neo4j_graph.create(product_node)# 创建品牌节点brand_node = Node(BRAND_LABEL, name=product_info['brand'])neo4j_graph.merge(brand_node, BRAND_LABEL, "name")# 创建商品与品牌的关系relationship = Relationship(product_node, "BRANDED_BY", brand_node)neo4j_graph.create(relationship)# 创建类别节点category_node = Node(CATEGORY_LABEL, name=product_info['category'])neo4j_graph.merge(category_node, CATEGORY_LABEL, "name")# 创建商品与类别的关系relationship = Relationship(product_node, "BELONGS_TO_CATEGORY", category_node)neo4j_graph.create(relationship)print("数据已成功导入到Neo4j知识图谱中。")
详细解释
获取网页内容:
- 使用 requests.get 方法获取网页内容。
- 将网页内容存储在 html_content 变量中。
解析HTML:
- 使用 BeautifulSoup 解析HTML文档。
- 提取所有商品信息,遍历每个 div 元素,提取商品名称、价格、品牌、类别和描述信息。
连接Neo4j数据库:
- 使用 py2neo.Graph 连接到 Neo4j 数据库。需要提供 Neo4j 的 Bolt 地址和认证信息。
- 可选步骤,清除 Neo4j 中已有的数据,以便重新导入。
创建节点和关系:
- 为每件商品创建一个 Product 节点。
- 为每个品牌创建一个 Brand 节点,并与商品节点建立 BRANDED_BY 关系。
- 为每个类别创建一个 Category 节点,并与商品节点建立 BELONGS_TO_CATEGORY 关系。
注意事项
- Neo4j 认证信息:请根据你的 Neo4j 实例配置正确的用户名和密码。
- Bolt 地址:如果你的 Neo4j 实例不在本地运行,请提供正确的 Bolt 地址。
- 数据清理:如果不需要每次都清除已有数据,可以注释掉 neo4j_graph.run("MATCH (n) DETACH DELETE n") 这一行。