如何使用单个 API 调用提取波兰公司财务数据

发布: (2025年12月29日 GMT+8 22:20)
6 min read
原文: Dev.to

Source: Dev.to

Piotr Kaplon

介绍

是否曾经需要波兰公司的财务数据?无论你是在构建金融科技应用、进行竞争对手分析,还是自动化尽职调查,从波兰国家法院登记处(KRS)获取数据都可能…痛苦。

在本教程中,我将展示如何在 30 秒内获取任何波兰公司的资产负债表、损益表以及关键财务指标。

问题

波兰要求所有公司向 eKRS 门户提交年度财务报表。这些数据是公开的,但:

  • 没有官方 API
  • 需要多次页面导航
  • 文件以 XML 或 XHTML 格式提供

复杂的波兰会计模式 (AktywaRazem, KapitalWlasny, ZyskNetto…)

  • 不同的会计准则对应不同的模式(UoR vs IFRS)

从头构建爬虫需要 20‑40 小时。但这只是第一步——随后你需要解析 XML,这意味着要学习波兰会计术语并处理多个模式版本。

解决方案

我们将在 Apify 上使用 Poland KRS Financial Scraper Actor。它处理所有复杂性——包括 XML 解析——并返回结构化的 JSON,内含可直接使用的财务指标。

关键优势: 您可以直接在 JSON 中获取 totalAssetsequityrevenuenetProfit 等——无需在您这边进行 XML 解析。

前置条件

  • 免费的 Apify 账户(在此注册
  • API 令牌(在 Apify 控制台 → 设置 → 集成 中找到)
  • 波兰公司的 NIP(税号)或 KRS 号码

方法 1:使用 Apify 控制台(无需代码)

最简单的测试方法:

  1. 前往 Actor 页面

  2. 输入以下内容:

    {
      "krs": "0000023302"
    }
  3. 点击 Start

  4. 等待约 30 秒。

  5. 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 编号。

理解输出

解析的财务指标

字段波兰语名称描述
totalAssetsAktywa razem总资产
fixedAssetsAktywa trwałe固定资产 / 非流动资产
currentAssetsAktywa obrotowe流动资产
equityKapitał własny股东权益
revenuePrzychody销售收入
operatingProfitZysk operacyjny营业利润
netProfitZysk 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 调用,即可获得可用于分析的结构化财务指标。

链接

有问题吗?请在评论中提出!

Back to Blog

相关文章

阅读更多 »