
Script Python 3 per scaricare/scrapare/estrarre i dipendenti di un'azienda dall'API di LinkedIn
LinkedInDumper è uno script Python 3 che estrae i dati dei dipendenti dalla piattaforma social LinkedIn.
I risultati includono nome, cognome, posizione (titolo), località e il link al profilo di un utente. Sono necessarie solo 2 chiamate API per recuperare tutti i dipendenti se l'azienda non ha più di 10 dipendenti. Altrimenti, è necessario paginare attraverso i risultati API. Con il flag CLI --email-format è possibile definire un formato stringa Python per generare automaticamente gli indirizzi email basati su nome e cognome recuperati.
LinkedInDumper comunica con l'API non ufficiale LinkedIn Voyager, che richiede l'autenticazione. Pertanto, devi disporre di un account utente LinkedIn valido. Per semplicità, LinkedInDumper accetta solo un valore cookie fornito da te. In questo modo, sono supportati anche account protetti da 2FA. Inoltre, devi fornire un URL aziendale LinkedIn da cui estrarre i dipendenti.
li_at, ad esempio tramite gli strumenti di sviluppo del browserli_at dello script Python o temporaneamente durante l'esecuzione tramite il flag CLI --cookieusage: linkedindumper.py [-h] --url <linkedin-url> [--cookie <cookie>] [--quiet] [--include-private-profiles] [--include-contact-infos] [--jitter] [--email-format <mail-format>] [--output-json <json-file>] [--output-csv <csv-file>]
options:
-h, --help show this help message and exit
--url <linkedin-url> A LinkedIn company url - https://www.linkedin.com/company/<company>
--cookie <cookie> LinkedIn 'li_at' session cookie
--include-private-profiles
Show private accounts too
--include-contact-infos
Query each employee individually and retrieve contact infos
--jitter Add a random jitter to HTTP requests to bypass rate limiting
--email-format <mail-format>
Python string format for emails; for example:
--email-format '{0}.{1}@example.com' --> [email protected]
--email-format '{0[0]}.{1}@example.com' --> [email protected]
--email-format '{1}@example.com' --> [email protected]
--email-format '{0}@example.com' --> [email protected]
--email-format '{0[0]}{1[0]}@example.com' --> [email protected]
--output-json <json-file>
Store results in json output file
--output-csv <csv-file>
Store results in csv output file
docker run --rm l4rm4nd/linkedindumper:latest --url 'https://www.linkedin.com/company/apple' --cookie '<cookie>' --email-format '{0}.{1}@apple.de'
# install dependencies
pip install -r requirements.txt
python3 linkedindumper.py --url 'https://www.linkedin.com/company/apple' --cookie '<cookie>' --email-format '{0}.{1}@apple.de'
Lo script restituirà i dati dei dipendenti come valori separati da punto e virgola (tipo CSV):
██▓ ██▓ ███▄ █ ██ ▄█▀▓█████ ▓█████▄ ██▓ ███▄ █ ▓█████▄ █ ██ ███▄ ▄███▓ ██▓███ ▓█████ ██▀███
▓██▒ ▓██▒ ██ ▀█ █ ██▄█▒ ▓█ ▀ ▒██▀ ██▌▓██▒ ██ ▀█ █ ▒██▀ ██▌ ██ ▓██▒▓██▒▀█▀ ██▒▓██░ ██▒▓█ ▀ ▓██ ▒ ██▒
▒██░ ▒██▒▓██ ▀█ ██▒▓███▄░ ▒███ ░██ █▌▒██▒▓██ ▀█ ██▒░██ █▌▓██ ▒██░▓██ ▓██░▓██░ ██▓▒▒███ ▓██ ░▄█ ▒
▒██░ ░██░▓██▒ ▐▌██▒▓██ █▄ ▒▓█ ▄ ░▓█▄ ▌░██░▓██▒ ▐▌██▒░▓█▄ ▌▓▓█ ░██░▒██ ▒██ ▒██▄█▓▒ ▒▒▓█ ▄ ▒██▀▀█▄
░██████▒░██░▒██░ ▓██░▒██▒ █▄░▒████▒░▒████▓ ░██░▒██░ ▓██░░▒████▓ ▒▒█████▓ ▒██▒ ░██▒▒██▒ ░ ░░▒████▒░██▓ ▒██▒
░ ▒░▓ ░░▓ ░ ▒░ ▒ ▒ ▒ ▒▒ ▓▒░░ ▒░ ░ ▒▒▓ ▒ ░▓ ░ ▒░ ▒ ▒ ▒▒▓ ▒ ░▒▓▒ ▒ ▒ ░ ▒░ ░ ░▒▓▒░ ░ ░░░ ▒░ ░░ ▒▓ ░▒▓░
░ ░ ▒ ░ ▒ ░░ ░░ ░ ▒░░ ░▒ ▒░ ░ ░ ░ ░ ▒ ▒ ▒ ░░ ░░ ░ ▒░ ░ ▒ ▒ ░░▒░ ░ ░ ░ ░ ░░▒ ░ ░ ░ ░ ░▒ ░ ▒░
░ ░ ▒ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░░░ ░ ░ ░ ░ ░░ ░ ░░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░ by LRVT
[i] Company Name: apple
[i] Company X-ID: 162479
[i] LN Employees: 1000 employees found
[i] Dumping Date: 17/10/2022 13:55:06
[i] Email Format: {0}.{1}@apple.de
Firstname;Lastname;Email;Position;Gender;Location;Profile
Katrin;Honauer;[email protected];Software Engineer at Apple;N/A;Heidelberg;https://www.linkedin.com/in/katrin-honauer
Raymond;Chen;[email protected];Recruiting at Apple;N/A;Austin, Texas Metropolitan Area;https://www.linkedin.com/in/raytherecruiter
[i] Successfully crawled 2 unique apple employee(s). Hurray ^_-
Opzionalmente, puoi utilizzare i parametri CLI --output-json e --output-csv per salvare i risultati in formato JSON o CSV.
LinkedIn permetterà di ottenere solo i primi 1.000 risultati di ricerca durante la raccolta delle informazioni di contatto. Potresti anche aver bisogno di un account LinkedIn premium quando raggiungi il numero massimo consentito di query per visitare i profili con il tuo account freemium LinkedIn.
Inoltre, non tutti i profili dei dipendenti sono pubblici. I risultati variano a seconda dell'account LinkedIn utilizzato e del fatto che tu sia amico o meno di alcuni dipendenti dell'azienda da esaminare. Pertanto, a volte non è possibile recuperare nome, cognome e URL del profilo di alcuni account dipendenti. Lo script non mostrerà tali profili, poiché contengono valori predefiniti come "LinkedIn" come nome e "Member" come cognome. Se desideri includere anche questi profili privati, utilizza il flag CLI --include-private-profiles. Sebbene alcuni account possano essere privati, possiamo ottenere la posizione (titolo) e la località di tali account. Solo nome, cognome e URL del profilo sono nascosti per account LinkedIn privati.
Infine, gli utenti di LinkedIn sono liberi di nominare il proprio profilo. Un nome account può quindi contenere varie cose come saluti, abbreviazioni, emoji, secondi nomi, ecc. Ho fatto del mio meglio per rimuovere alcune cose inutili. Tuttavia, questa non è una soluzione completa al problema generale. Nota che non stiamo utilizzando l'API ufficiale di LinkedIn. Questo script raccoglie informazioni dall'API "non ufficiale" Voyager.
Puoi usare il flag CLI sperimentale --include-contact-infos per recuperare ulteriori dettagli dalle informazioni di contatto di un utente (nome, cognome, indirizzo, telefono, email, indirizzo). Questo interroga ogni account utente LinkedIn enumerato singolarmente e recupera i dati tramite l'API GraphQL. Restituisce solo output JSON ed è molto intensivo in termini di richieste. Se i dati vengono restituiti dipende dall'impostazione della privacy dell'utente e dall'account LinkedIn che utilizzi per l'enumerazione.
Se ricevi un messaggio di errore come maximum request exceeded, prova il parametro CLI --jitter per introdurre alcuni ritardi nelle richieste API automatizzate. Questo potrebbe essere in grado di bypassare le rilevazioni o il limite di velocità implementato da LinkedIn.