budgetkey/budgetkey-data-pipelines、加载到关系数据库(供分析师进行深度查询)以及推送到键值存储(Elasticsearch),为主要网站(obudget.org)提供数据支持。
实现这一过程的框架是datapackage-pipelines,该框架允许编写简单的“管道”,每个管道由一组预定义处理步骤组成。这些管道无需编码,而是通过一组YAML文件定义。大多数管道使用通用构建块,部分使用自定义处理器(主要是针对特殊数据源的自定义爬虫)。
要查看各管道的当前处理状态,可访问仪表盘。
datapackage-pipelines框架的应用示例,供开发者参考所有管道定义位于datapackage_pipelines_budgetkey_data_pipeline/pipelines目录下,主要结构如下:
budget/
national/
original:获取国家预算的管道processed:处理和分析国家预算的管道changes/
original:获取国家预算变更信息的管道processed:处理和分析预算变更(检测交易等)的管道explanations:获取和提取国家预算变更说明文档文本的管道entities/
associations:获取非***组织(NGO)信息的管道companies:获取公司信息的管道ottoman:获取奥斯曼协会信息的管道special:获取其他实体信息的管道procurement/
spending:获取和处理***支出报告的管道tenders:获取***招标流程数据的管道supports/:获取***支持及其相关流程数据的管道注:如需了解不同类型***支出的区别,可阅读这篇博客文章。
datapackage-pipelines框架文档datapackage-pipelines-budgetkey包bashsudo apt-get install build-essential python3-dev libxml2-dev libxslt1-dev libleveldb-dev
推荐使用pyenv管理Python版本。
Ubuntu系统:
bashsudo apt-get install git python-pip make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev sudo pip install virtualenvwrapper git clone [***] ~/.pyenv git clone [***] ~/.pyenv/plugins/pyenv-virtualenvwrapper echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc echo 'pyenv virtualenvwrapper' >> ~/.bashrc exec $SHELL
OSX系统:
bashbrew install pyenv echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
安装完成后设置Python版本:
bashpyenv install 3.6.1 pyenv global 3.6.1
bashpython --version # 确保输出Python 3.6.0+ sudo mkdir -p /var/datapackages && sudo chown $USER /var/datapackages/ make install budgetkey-dpp # 验证安装,应显示可用管道列表
bashbudgetkey-dpp run ./entities/companies/registrar/registry
运行后将创建以下文件:
/var/datapackages:数据以datapackage格式保存datapackage_pipelines_budgetkey/.data.db:数据存储到数据库(可通过DPP_DB_ENGINE环境变量设置自定义数据库,格式为SQLAlchemy连接URL)datapackage_pipelines_budgetkey/pipelines/.dpp.db:管道元数据和运行状态bashmake test
bash# 运行特定测试文件 tox tests/tenders/test_fixtures.py # 直接使用py.test(需先安装pytest) pip install pytest py.test tests/tenders/test_fixtures.py -svk test_tenders_fixtures_publishers
Docker Compose可用于运行包含所有必要服务的完整环境,类似生产环境。
docker-compose build pipelinesbashdocker-compose up -d redis db pipelines
http://localhost:5000/(默认不运行工作节点)postgresql://postgres:***@localhost:***/postgresbashdocker-compose exec pipelines sh -c "budgetkey-dpp"
bashdocker-compose up -d elasticsearch kibana
bashsource .env.example dpp
以下步骤将datapackage加载到Elasticsearch,供Kibana探索数据(注意:会删除本地Docker Compose卷,确保无重要数据):
bash# 启动基础服务 docker-compose down -v && docker-compose pull elasticsearch db && docker-compose up -d elasticsearch db # 设置环境变量 export DPP_DB_ENGINE="postgresql://postgres:***@localhost:***/postgres" export DPP_ELASTICSEARCH="localhost:***" # 加载数据(默认加载每个管道前100行,可修改ES_LIMIT_ROWS或移除) for doctype in `budgetkey-dpp | grep .budgetkey/elasticsearch/index_ | cut -d"_" -f2 - | cut -d" " -f1 -`; do echo " > 加载 ${doctype}" ES_LOAD_FROM_URL=1 ES_LIMIT_ROWS=100 budgetkey-dpp run ./budgetkey/elasticsearch/index_$doctype done
启动Kibana探索数据:
bashdocker-compose up -d kibana
Kibana可通过http://localhost:***/访问(启动可能需要几分钟),索引名称为budgetkey。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务