
Script Python 3 pour décharger/extraire/récupérer les employés d'une entreprise depuis l'API LinkedIn
LinkedInDumper est un script Python 3 qui extrait les données des employés de la plateforme de réseau social LinkedIn.
Les résultats contiennent le prénom, le nom, le poste (titre), la localisation et le lien vers le profil de l'utilisateur. Seulement 2 appels API sont nécessaires pour récupérer tous les employés si l'entreprise n'en compte pas plus de 10. Sinon, il faut paginer à travers les résultats de l'API. Avec le paramètre CLI --email-format, vous pouvez définir un format de chaîne Python pour générer automatiquement des adresses e-mail à partir du prénom et du nom récupérés.
LinkedInDumper communique avec l'API non officielle LinkedIn Voyager, qui nécessite une authentification. Par conséquent, vous devez disposer d'un compte utilisateur LinkedIn valide. Pour rester simple, LinkedInDumper attend simplement une valeur de cookie que vous fournissez. De cette façon, même les comptes protégés par 2FA sont pris en charge. De plus, vous devez fournir une URL d'entreprise LinkedIn pour extraire les employés.
li_at, par exemple via les outils de développement.li_at, soit temporairement lors de l'exécution via le paramètre CLI --cookie.usage: 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'
Le script renverra les données des employés sous forme de valeurs séparées par des points-virgules (comme 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 ^_-
Optionnellement, vous pouvez utiliser les paramètres CLI --output-json et --output-csv pour stocker les résultats au format JSON ou CSV.
LinkedIn n'autorise le retour que des 1 000 premiers résultats de recherche lors de la récolte d'informations de contact. Vous pouvez également avoir besoin d'un compte LinkedIn premium lorsque vous atteignez le nombre maximal de requêtes autorisées pour consulter des profils avec votre compte LinkedIn gratuit.
De plus, tous les profils d'employés ne sont pas publics. Les résultats varient en fonction du compte LinkedIn que vous utilisez et du fait que vous soyez ou non en relation avec certains employés de l'entreprise à explorer. Par conséquent, il est parfois impossible de récupérer le prénom, le nom et l'URL du profil de certains comptes d'employés. Le script n'affichera pas ces profils, car ils contiennent des valeurs par défaut telles que « LinkedIn » comme prénom et « Member » comme nom. Si vous souhaitez inclure ces profils privés, veuillez utiliser le paramètre CLI --include-private-profiles. Bien que certains comptes puissent être privés, nous pouvons obtenir le poste (titre) ainsi que la localisation de ces comptes. Seuls le prénom, le nom et l'URL du profil sont masqués pour les comptes LinkedIn privés.
Enfin, les utilisateurs de LinkedIn sont libres de nommer leur profil. Un nom de compte peut donc contenir diverses choses telles que des salutations, des abréviations, des émojis, des deuxièmes prénoms, etc. J'ai fait de mon mieux pour supprimer certaines absurdités. Cependant, ce n'est pas une solution complète au problème général. Notez que nous n'utilisons pas l'API officielle de LinkedIn. Ce script recueille des informations à partir de l'API « non officielle » Voyager.
Vous pouvez utiliser le paramètre CLI expérimental --include-contact-infos pour récupérer des détails supplémentaires à partir des informations de contact d'un utilisateur (prénom, nom, adresse, téléphone, e-mail, adresse). Cela interrogera chaque compte utilisateur LinkedIn énuméré individuellement et récupérera les données en utilisant l'API GraphQL. Il renvoie uniquement une sortie JSON et est très intensif en requêtes. Le retour de données dépend du paramètre de confidentialité de l'utilisateur et du compte LinkedIn que vous utilisez pour l'énumération.
Si vous rencontrez un message d'erreur comme « maximum request exceeded », essayez le paramètre CLI --jitter pour introduire des délais dans les requêtes API automatisées. Cela peut permettre de contourner les détections ou la limitation de débit mises en place par LinkedIn.