如何使用单个 API 调用提取波兰公司财务数据
Source: Dev.to
介绍
是否曾经需要波兰公司的财务数据?无论你是在构建金融科技应用、进行竞争对手分析,还是自动化尽职调查,从波兰国家法院登记处(KRS)获取数据都可能…痛苦。
在本教程中,我将展示如何在 30 秒内获取任何波兰公司的资产负债表、损益表以及关键财务指标。
问题
波兰要求所有公司向 eKRS 门户提交年度财务报表。这些数据是公开的,但:
- 没有官方 API
- 需要多次页面导航
- 文件以 XML 或 XHTML 格式提供
复杂的波兰会计模式 (AktywaRazem, KapitalWlasny, ZyskNetto…)
- 不同的会计准则对应不同的模式(UoR vs IFRS)
从头构建爬虫需要 20‑40 小时。但这只是第一步——随后你需要解析 XML,这意味着要学习波兰会计术语并处理多个模式版本。
解决方案
我们将在 Apify 上使用 Poland KRS Financial Scraper Actor。它处理所有复杂性——包括 XML 解析——并返回结构化的 JSON,内含可直接使用的财务指标。
关键优势: 您可以直接在 JSON 中获取 totalAssets、equity、revenue、netProfit 等——无需在您这边进行 XML 解析。
前置条件
- 免费的 Apify 账户(在此注册)
- API 令牌(在 Apify 控制台 → 设置 → 集成 中找到)
- 波兰公司的 NIP(税号)或 KRS 号码
方法 1:使用 Apify 控制台(无需代码)
最简单的测试方法:
-
前往 Actor 页面。
-
输入以下内容:
{ "krs": "0000023302" } -
点击 Start。
-
等待约 30 秒。
-
在 Dataset 选项卡中查看结果。
方法 2:使用 API(JavaScript/Node.js)
用于将其集成到您的应用程序中:
const Apify = require('apify-client');
const client = new Apify.ApifyClient({
token: 'YOUR_API_TOKEN',
});
async function getPolishCompanyFinancials(krsNumber) {
// Start the Actor
const run = await client.actor('minute_contest/poland-krs-financial-scraper').call({
krs: krsNumber,
});
// Get results from dataset
const { items } = await client.dataset(run.defaultDatasetId).listItems();
return items[0];
}
// Example usage
(async) => {
const financials = await getPolishCompanyFinancials('0000023302');
console.log(financials);
})();
示例输出
{
"krs": "0000023302",
"year": 2024,
"fileName": "Sprawozdanie_finansowe_2024.xml",
"fileFormat": "xml",
"financials": {
"totalAssets": 54850000000,
"equity": 32100000000,
"fixedAssets": 42100000000,
"currentAssets": 12750000000,
"revenue": 33500000000,
"operatingProfit": 4200000000,
"netProfit": 2850000000
},
"success": true
}
方法 3:使用 cURL
用于快速的命令行测试或与任何语言的集成:
curl -X POST "https://api.apify.com/v2/acts/minute_contest~poland-krs-financial-scraper/run-sync-get-dataset-items" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"krs": "0000023302"}'
方法 4:使用 Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
def get_polish_company_financials(krs_number):
run_input = {"krs": krs_number}
run = client.actor("minute_contest/poland-krs-financial-scraper").call(run_input=run_input)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
return items[0] if items else None
# Example
financials = get_polish_company_financials("0000023302")
print(f"Total Assets: {financials['financials']['totalAssets']:,} PLN")
print(f"Net Profit: {financials['financials']['netProfit']:,} PLN")
使用 NIP 替代 KRS
没有 KRS 编号?请改用公司的 NIP(税号):
const financials = await getPolishCompanyFinancials({ nip: '8992736629' });
Actor 将自动根据 NIP 查询 KRS 编号。
理解输出
解析的财务指标
| 字段 | 波兰语名称 | 描述 |
|---|---|---|
totalAssets | Aktywa razem | 总资产 |
fixedAssets | Aktywa trwałe | 固定资产 / 非流动资产 |
currentAssets | Aktywa obrotowe | 流动资产 |
equity | Kapitał własny | 股东权益 |
revenue | Przychody | 销售收入 |
operatingProfit | Zysk operacyjny | 营业利润 |
netProfit | Zysk netto | 净利润 |
原始数据访问
如果需要自定义解析,完整的 XML/XHTML 文件可在 rawXml 中获取:
const { rawXml, fileFormat } = financials;
if (fileFormat === 'xml') {
const parser = new DOMParser();
const doc = parser.parseFromString(rawXml, 'text/xml');
// Custom extraction...
}
实际使用案例
竞争对手分析仪表板
const competitors = ['0000023302', '0000012345', '0000067890'];
const results = await Promise.all(
competitors.map(krs => getPolishCompanyFinancials(krs))
);
console.table(results.map(r => ({
krs: r.krs,
revenue: r.financials.revenue,
netProfit: r.financials.netProfit,
})));
批量检索示例
const results = await Promise.all(
krsList.map(krs => getPolishCompanyFinancials(krs))
);
// Compare metrics
results.forEach(company => {
console.log(`KRS ${company.krs}: Revenue ${company.financials.revenue}`);
});
自动尽职调查
async function dueDiligenceCheck(nip) {
const financials = await getPolishCompanyFinancials({ nip });
const checks = {
hasPositiveEquity: financials.financials.equity > 0,
isProfitable: financials.financials.netProfit > 0,
currentRatio:
financials.financials.currentAssets /
(financials.financials.totalAssets - financials.financials.equity)
};
return { financials, checks };
}
批量数据收集
const companies = readCSV('polish_companies.csv'); // List of KRS numbers
for (const krs of companies) {
const data = await getPolishCompanyFinancials(krs);
await saveToDatabase(data);
await sleep(1000); // Rate limiting
}
定价
- ~$0.03 每次成功提取
- 无需订阅
- 提供免费层用于测试
错误处理
const result = await getPolishCompanyFinancials('0000023302');
if (!result.success) {
console.error(`Error: ${result.error}`);
// Common errors:
// - "Company not found" – Invalid KRS number
// - "No financial statements" – Company hasn't filed yet
// - "Multiple formats" – Handle XHTML separately
}
结论
获取波兰公司财务数据并不一定很复杂。只需一次 API 调用,即可获得可用于分析的结构化财务指标。
链接
有问题吗?请在评论中提出!
