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=9524To 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 pdNastę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 adekwatnymi 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 +=1Operacje 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.pyPliki 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! ?