Portia是一个可视化网页抓取工具,无需编程知识即可实现网站数据提取。用户通过标注网页元素来定义需提取的数据,Portia能基于这些标注自动从相似页面中抓取信息,适用于各类网站的数据收集场景。
一个Portia项目通常包含一个或多个爬虫(Spider)。
爬虫(Spider)
针对特定网站的抓取器,其配置分为三个部分:
模板(Templates)
爬虫访问页面时,会将页面与各模板匹配,标注数量多的模板优先。若匹配成功,将使用模板标注提取数据生成条目(Item,需所有必填字段均填充)。模板由标注组成,定义从页面提取的元素及对应条目字段,可针对不同页面布局创建多个模板(如电商网站的书籍和CD页面)。
标注(Annotations)
定义网页数据的位置及爬虫使用方式,通常将页面元素映射到条目字段,也可标记为必填项(仅检查元素存在性,不存储数据)。支持映射元素属性(如锚链接的href属性)而非内容。
条目(Items)
从目标网站抓取的单个数据项(如电商产品)。条目定义(Item Definition)指条目的 schema,包含多个字段(如name、price)。可设置字段为"必填"(缺失时丢弃条目)或"可变"(检查重复时忽略该字段,如URL字段)。
构建镜像
bashdocker build -t portia .
运行容器
bashdocker run -i -t --rm \ -v <PROJECT_FOLDER>/data:/app/slyd/data:rw \ -p 9001:9001 \ --name portia \ portia
-v <PROJECT_FOLDER>/data:/app/slyd/data:rw:挂载项目目录,用于存储Portia项目数据-p 9001:9001:映射端口,访问地址为http://localhost:9001/static/main.html<PROJECT_FOLDER>路径格式需为/<盘符>/<路径>(如/c/portia/projects)运行爬虫
在容器中执行portiacrawl命令运行项目中的爬虫:
bashdocker run -i -t --rm \ -v <PROJECT_FOLDER>/data:/app/slyd/data:rw \ portia /app/slybot/bin/portiacrawl <PROJECT_PATH> [SPIDER] [OPTIONS]
<PROJECT_PATH>:项目路径(如/app/slyd/data/projects/myproject)[SPIDER]:爬虫名称(可选,不指定时列出项目所有爬虫)[OPTIONS]:可传递Scrapy参数(如-a传递参数,--settings指定自定义设置模块)多字段提取
单个标注可提取多个字段,通过标注设置中的"Attribute mappings"定义元素的多个属性映射(如锚链接的href属性和文本内容分别映射到不同字段)。
变体(Variants)
用于处理同一项目的多个变体(如不同尺寸的产品)。将公共数据标注到"Base"变体,变体数据标注到不同变体编号,Portia会自动生成每个变体的完整条目。
部分标注(Partial Annotations)
通过拖拽高亮文本片段提取部分内容(如从"Price: $5.00"中提取"5.00"),需确保文本周围存在固定模式以便匹配相似页面。
Portia项目可通过Scrapyd部署:
slyd/data/projects/PROJECT_NAME),在scrapy.cfg中添加Scrapyd目标bashscrapyd-deploy your_scrapyd_target -p project_name
bashcurl http://your_scrapyd_host:6800/schedule.json -d project=your_project_name -d spider=your_spider_name
在slyd/slyd目录创建local_settings.py:
pythonimport os SPEC_FACTORY = { 'PROJECT_SPEC': 'slyd.gitstorage.projectspec.ProjectSpec', 'PROJECT_MANAGER': 'slyd.gitstorage.projects.ProjectsManager', 'PARAMS': { 'storage_backend': 'dulwich.fsrepo.FsRepo', 'location': os.environ.get('PORTIA_DATA_DIR', SPEC_DATA_DIR) }, 'CAPABILITIES': { 'version_control': True, 'create_projects': True, 'delete_projects': True, 'rename_projects': True } }
在slyd/slyd目录创建local_settings.py:
pythonimport os SPEC_FACTORY = { 'PROJECT_SPEC': 'slyd.gitstorage.projectspec.ProjectSpec', 'PROJECT_MANAGER': 'slyd.gitstorage.projects.ProjectsManager', 'PARAMS': { 'storage_backend': 'dulwich.mysqlrepo.MysqlRepo', 'location': os.environ.get('DB_URL'), }, 'CAPABILITIES': { 'version_control': True, 'create_projects': True, 'delete_projects': True, 'rename_projects': True } }
设置环境变量DB_URL=mysql://<USERNAME>:<PASSWORD>@<HOST>:<PORT>/<DB>,执行bin/init_mysqldb初始化数据库。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务