Files
aki_prj23_transparenzregister/Jupyter/API-tests/API research_Tristan.ipynb
Philipp Horstenkamp 41f2c9f995 Executing black over all jupyter notebook (#190)
Reverting black for the jupyter notebooks gets old. Can we just run
black over all of them?
2023-10-04 20:03:47 +02:00

16 KiB
Raw Blame History

Corporate Intelligence

API Research

BundesAPI

Down to due maintenance work from 24.03. - 26.03.

Basically a Bundesanzeiger Scraping Wrapper

In [2]:
from deutschland.bundesanzeiger import Bundesanzeiger

ba = Bundesanzeiger()
# search term
data = ba.get_reports("Atos IT-Dienstleistung & Beratung GmbH")
# returns a dictionary with all reports found as fulltext reports
print(data.keys())
C:\Users\trist\AppData\Roaming\Python\Python310\site-packages\requests\__init__.py:102: RequestsDependencyWarning: urllib3 (1.26.12) or chardet (5.1.0)/charset_normalizer (2.0.12) doesn't match a supported version!
  warnings.warn("urllib3 ({}) or chardet ({})/charset_normalizer ({}) doesn't match a supported "
dict_keys(['Aufsichtsrat', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2020 bis zum 31.12.2020', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2019 bis zum 31.12.2019', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2018 bis zum 31.12.2018', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2017 bis zum 31.12.2017', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2016 bis zum 31.12.2016', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2015 bis zum 31.12.2015', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2014 bis zum 31.12.2014', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2013 bis zum 31.12.2013', 'Jahresabschluss zum Geschäftsjahr vom 01.01.2012 bis zum 31.12.2012', 'Jahresabschluss zum Geschäftsjahr vom 01.10.2010 bis zum 30.06.2011', 'Jahresabschluss zum Geschäftsjahr vom 01.07.2011 bis zum 31.12.2011', 'Jahresbericht zum 31.3.2006', 'Jahresbericht 30.11.2022'])
In [9]:
# Note: There can be multiple "Aufsichtsrat" entries per Company, the API however does only return one because the keys are overwritten
jahresabschluss = data[
    "Jahresabschluss zum Geschäftsjahr vom 01.01.2019 bis zum 31.12.2019"
]

# Note: Although the report includes the entire text it lacks the formatting that would make extracting information a lot easier as the data is wrapped inside a <table> originally
with open("./jahresabschluss-example.txt", "w") as file:
    file.write(jahresabschluss["report"])
print(jahresabschluss.keys())
dict_keys(['date', 'name', 'company', 'report'])
In [3]:
from deutschland.handelsregister import Handelsregister

hr = Handelsregister()

results = hr.search(keywords="BLUECHILLED Verwaltungs GmbH")
print(results)
None

Offene Register

Hint: Visualize schema with tools such a DBeaver

Note: Not up-to-date

In [3]:
# SQLite export
import sqlite3

con = sqlite3.connect("../data/openregister.db")
In [4]:
cur = con.cursor()
In [5]:
schema = cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
schema.fetchall()
Out[5]:
[('name',),
 ('registrations',),
 ('officer',),
 ('company',),
 ('company_fts',),
 ('company_fts_data',),
 ('company_fts_idx',),
 ('company_fts_docsize',),
 ('company_fts_config',),
 ('officer_fts',),
 ('officer_fts_data',),
 ('officer_fts_idx',),
 ('officer_fts_docsize',),
 ('officer_fts_config',),
 ('name_fts',),
 ('name_fts_data',),
 ('name_fts_idx',),
 ('name_fts_docsize',),
 ('name_fts_config',)]
In [6]:
import pandas as pd

df = pd.read_sql_query("SELECT * FROM company LIMIT 100", con)
df.head()
Out[6]:
<style scoped=""> .dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </style>
id company_number current_status jurisdiction_code name registered_address retrieved_at register_flag_AD register_flag_CD register_flag_DK ... native_company_number registered_office registrar register_art register_nummer former_registrar register_flag_ register_flag_Note: _registerNummerSuffix register_flag_Status information
0 1 K1101R_HRB150148 currently registered de olly UG (haftungsbeschränkt) Waidmannstraße 1, 22769 Hamburg. 2018-11-09T18:03:03Z 1 1 1 ... Hamburg HRB 150148 Hamburg Hamburg HRB 150148 None None None None None
1 2 R1101_HRB81092 currently registered de BLUECHILLED Verwaltungs GmbH Oststr. 2018-07-25T11:14:02Z 1 1 1 ... Düsseldorf HRB 81092 Düsseldorf Düsseldorf HRB 81092 None None None None None
2 3 H1101_H1101_HRB18423 currently registered de Mittelständische Beteiligungsgesellschaft Brem... Langenstraße 2-4, 28195 Bremen. 2018-06-24T21:12:00Z 1 1 1 ... Bremen früher Bremen HRB 18423 Bremen Bremen HRB 18423 Bremen None None None None
3 4 R1101_HRB45109 currently registered de Albert Barufe GmbH Hans-Sachs-Straße 11, 40721 Hilden. 2018-07-25T11:15:01Z 1 1 1 ... Düsseldorf HRB 45109 Hilden Düsseldorf HRB 45109 None None None None None
4 5 R1101_HRB37996 currently registered de ITERGO Informationstechnologie GmbH ERGO-Platz 1, 40477 Düsseldorf. 2018-07-25T12:32:08Z 1 1 1 ... Düsseldorf HRB 37996 Düsseldorf Düsseldorf HRB 37996 None None None None None

5 rows × 25 columns

Open Corporates

In [7]:
import requests

BASE_URL = "https://api.opencorporates.com"
In [8]:
response = requests.get(f"{BASE_URL}/companies/search")
response.status_code
Out[8]:
401