O scrapingu danych trochę już napisaliśmy. Przede wszystkim TUTAJ pokazaliśmy jak można pobierać dane w sposób automatyczny przy wykorzystaniu prostego pluginu Chrome. Wcześniej w TYM artykule jednocześnie opisaliśmy jak budowane są strony internetowe – w szczególności ich część wizualna. Wiedza ta jest bardzo przydatna przy kodowaniu swojego własnego scrapera. A o tym właśnie dzisiaj!

Co pobieramy – rejestr cypryjski

W celu przećwiczenia scrapingu danych zajmiemy się zgromadzeniem pełnej (!) bazy danych spółek cypryjskich dostępnych na stronie internetowej Cyprus Registry. Jak widzimy jest to strona z paginacją, a wszystkie dane spółek zostały zapisane na 9524 stronach. Zatem nasze dane wejściowe i wyjściowe to następujące URL:

https://cyprusregistry.com/companies?page=1
https://cyprusregistry.com/companies?page=9524

To bardzo ważne – musimy przewidzieć w kodzie iterację, która zbuduje nam pełną listę URL, z których ostatecznie będziemy pobierać dane spółek! 🙂

Python – jakie biblioteki wykorzystamy?

Tu odpowiedź jest bardzo prosta, bo cały proces też jest bardzo prosty. Wykorzystamy request do odpytywania strony internetowej, BeautifulSoup do parsowania danych html oraz pandas do zarządzania danymi w DataFrame. Brzmi strasznie? Nic bardziej mylnego. Oto początek naszego kodu:

import requests
from bs4 import BeautifulSoup
import pandas as pd

Następnie definiujemy kilka stałych wartości, do których będziemy się odwoływać w pętlach i różnych momentach naszego programu:

#bazowe url do analizy
base_url = "https://cyprusregistry.com/companies?page="

#strony do analizy
r1, r2 = 1, 9524

#puste listy do scrapingu danych
cyprusRegistry = []
companies = []
adresses = []
company_urls = []

I tworzymy listę zawierającą wszystkie adresy URL z właściwymi paginacjami (stronami) do analizy:

#lista z paginacją
def createList(r1, r2):
    return list(range(r1, r2 + 1))

paginationList = createList(r1, r2)

for i in paginationList:
    scraping_url = base_url + str(i)
    cyprusRegistry.append(scraping_url)

Zaczynamy scraping w naszym skrypcie Python – pętla

Po zdefiniowaniu i przygotowaniu powyższych danych została sama przyjemność – napisanie pętli, która odpali każdą stronę i pobierze z niej listę wyświetlanych spółek, adres rejestracji podmiotu oraz URL do szczegółowych danych o podmiocie. Pętla wygląda następująco:

#scraping
for url in cyprusRegistry:
    page = requests.get(url)
    soup = BeautifulSoup(page.content, "html.parser")
    for company in soup.find_all("h5", class_="mb-1"):
        nice_name = company.text
        companies.append(nice_name)
    for adress in soup.find_all("p", class_="mb-1"):
        nice_adress = adress.text
        adresses.append(nice_adress)
    for anchor in soup.findAll('a', class_="text-dark", href=True):
        company_urls.append(anchor['href'])
    print("Przeanalizowano " + str(r1)+ " stron")
    r1 +=1

Operacje na danych w Python – DataFrame

Koniec naszej operacji to zapisanie danych do struktury DataFrame i export do pliku Excel, który tworzy piękną bazę danych z cypryjskiego rejestru.

#konwersja do dataframe
cyprus_dataframe = pd.DataFrame(list(zip(companies, adresses, company_urls)),
              columns=['Nazwa','Adres', 'URL'])

#export do pliku XLSX
cyprus_dataframe.to_excel("Cyprus_Business_Register-1-9524.xlsx")

W efekcie działania skryptu powstaje plik XLSX, który zawiera wszystkie zarejestrowane na Cyprze spółki dostępne w rejestrze Cyprus Registry, ich adres oraz URL do szczegółowych informacji o podmiocie. Co zrobimy w kolejnym kroku? Pobierzemy wszystkie informacje o osobach związanych z tymi podmiotami! Ale to już w kolejnym artykule o scrapingu danych przy użyciu Pythona. Aby uruchomić skrypt wystarczy doinstalować niezbędne biblioteki poleceniem pip install i uruchomić w terminalu aplikację:

python3 osintquest_cydb.py

Pliki do pobrania

Dodatkowo udostępniamy Wam pobrany przez nasz skrypt rejestr spółek z Cypru oraz kod źródłowy całej aplikacji do analizy. Do boju osintowcy! 🙂