You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

语义网新手求助:提取含ACT的地址ID及RDF存储入库方案

处理GNAF地址:提取ACT ID、转RDF并入库指南

Hey there! Since you've already fetched the page content, let's tackle the rest of your workflow step by step. I'll walk you through extracting those ACT-specific address IDs, converting the data to RDF, and storing it in a database for later use.

1. 提取包含'ACT'的地址ID

首先我们要解析HTML,找出包含'ACT'的地址条目(GNAF是澳大利亚地址数据,ACT指首都领地)。假设页面里的地址都指向详情页链接,我们可以这样提取并筛选ID:

import requests
from bs4 import BeautifulSoup
import re

url='http://gnafld.net/address/?page=7&per_page=10'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

# 找到所有指向地址详情页的链接(根据实际页面结构调整正则)
address_links = soup.find_all('a', href=re.compile(r'/address/\d+'))

act_address_ids = []
for link in address_links:
    # 从链接中提取地址ID(比如/address/12345 → 12345)
    address_id = link['href'].split('/')[-1]
    # 检查地址文本是否包含ACT(如果页面用其他元素展示地址,调整获取文本的方式)
    address_content = link.get_text(strip=True)
    if 'ACT' in address_content:
        act_address_ids.append(address_id)

print("找到的ACT地址ID:", act_address_ids)

提示:如果页面用特定类名(比如address-item)包裹地址条目,修改find_all的目标元素即可。可以先查看页面HTML结构确认选择器。

2. 获取地址详情并转换为RDF

接下来我们要拉取每个ACT地址的完整信息,再构造成RDF结构。我们用rdflib库来构建RDF图,先通过pip install rdflib安装它。

from rdflib import Graph, URIRef, Literal, Namespace

# 定义自定义命名空间(也可以用Schema.org这类现成的本体)
GNAF_ONTO = Namespace("http://gnafld.net/ontology/")
ADDRESS_URI = Namespace("http://gnafld.net/address/")

# 初始化空的RDF图
rdf_graph = Graph()

# 遍历每个ACT地址ID,获取详情
for addr_id in act_address_ids:
    detail_url = f"http://gnafld.net/address/{addr_id}"
    detail_page = requests.get(detail_url)
    detail_soup = BeautifulSoup(detail_page.text, 'html.parser')
    
    # 提取地址字段(根据详情页实际HTML结构调整选择器)
    address_line = detail_soup.find('div', class_='address-line').get_text(strip=True)
    suburb = detail_soup.find('div', class_='suburb').get_text(strip=True)
    postcode = detail_soup.find('div', class_='postcode').get_text(strip=True)
    
    # 为地址创建唯一URI
    addr_resource = URIRef(ADDRESS_URI + addr_id)
    
    # 向RDF图添加三元组
    rdf_graph.add((addr_resource, GNAF_ONTO.hasAddressLine, Literal(address_line)))
    rdf_graph.add((addr_resource, GNAF_ONTO.hasSuburb, Literal(suburb)))
    rdf_graph.add((addr_resource, GNAF_ONTO.hasPostcode, Literal(postcode)))
    rdf_graph.add((addr_resource, GNAF_ONTO.isLocatedInState, Literal('ACT')))

# 可选:以Turtle格式打印RDF内容验证
print(rdf_graph.serialize(format='turtle').decode('utf-8'))

提示:如果详情页用<p>或其他标签展示字段,修改find的目标元素即可。如果页面有经纬度等更多信息,也可以扩展三元组的内容。

3. 将RDF存入数据库

为了后续使用,我们用rdflib-sqlalchemy把RDF图存入数据库,这里以SQLite为例,先通过pip install rdflib-sqlalchemy安装依赖。

from rdflib_sqlalchemy import registerplugins

# 注册SQLAlchemy存储插件
registerplugins()

# 连接SQLite数据库(不存在则自动创建)
db_connection_uri = 'sqlite:///gnaf_act_addresses.db'
db_graph = Graph(store='SQLAlchemy', identifier='http://gnafld.net/')
db_graph.open(db_connection_uri, create=True)

# 将RDF图写入数据库
db_graph += rdf_graph

# 关闭连接保存更改
db_graph.close()

print("RDF数据已成功存入数据库!")

如果用PostgreSQL或MySQL,修改db_connection_uri为对应格式即可(比如postgresql://user:password@localhost/gnaf_db)。

内容的提问来源于stack exchange,提问作者SpongeBob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:36:40