Comment extraire des données de LinkedIn : guide de 2024

De la découverte de talents à l’analyse du parcours professionnel, en passant par l’identification des entreprises dans lesquelles investir, la cartographie du paysage concurrentiel concernant un nouveau marché et l’amélioration de la gestion de la relation client (GRC). Les points de données de LinkedIn sont essentiels pour permettre aux entreprises de créer une approche commerciale plus ciblée et plus efficace
19 min de lecture
How to scrape LinkedIn
  1. Extraire des données de LinkedIn avec Python
  2. Éléments à prendre en compte lors de l’extraction de données de LinkedIn

Dans sa forme la plus simple, le web scraping consiste à automatiser le processus de collecte des informations disponibles sur le Web, qui peuvent ensuite être stockées, analysées ou utilisées pour alimenter les processus de prise de décision.

Maintenant, vous vous demandez peut-être pourquoi LinkedIn ? LinkedIn, en tant que plateforme de réseautage professionnel, est une mine de données. Elle héberge une abondance de renseignements sur les professionnels, les entreprises et les opportunités d’emploi. Par exemple, les recruteurs peuvent l’utiliser pour trouver des candidats potentiels, les équipes commerciales peuvent identifier des prospects potentiels et les chercheurs peuvent l’utiliser pour analyser le marché du travail. Les possibilités sont infinies.

Dans ce tutoriel, vous allez apprendre à extraire des données de LinkedIn à l’aide de Beautiful Soup. Après avoir parcouru le processus étape par étape, vous découvrirez également la solution de Bright Data qui permet d’accélérer considérablement l’extraction de données de LinkedIn.

Extraire des données de LinkedIn avec Python

Dans ce tutoriel, vous allez utiliser Python pour créer un extracteur de données à l’aide d’outils gratuits, comme Beautiful Soup et Requests. C’est parti !

Remarque : ce tutoriel est uniquement destiné à des fins pédagogiques et vise à démontrer des capacités techniques. Sachez que l’extraction de données de LinkedIn est strictement interdite, conformément aux Conditions d’utilisation de LinkedIn. Toute utilisation abusive de ces informations à des fins d’extraction de données de LinkedIn peut entraîner le bannissement définitif de votre compte LinkedIn ou entraîner d’éventuelles conséquences juridiques. Procédez à vos risques et périls.

Avant de commencer, assurez-vous que Python version 3.7.9 ou une version ultérieure est installée sur votre système.

Après avoir installé Python, l’étape suivante consiste à configurer les bibliothèques requises pour le web scraping. Ici, vous utiliserez Requests pour effectuer des requêtes HTTP, BeautifulSoup (BS4) pour analyser le contenu HTML et Playwright pour l’interaction avec le navigateur et l’automatisation des tâches. Ouvrez votre terminal ou votre shell et exécutez les commandes suivantes :

   pip3 install beautifulsoup4
   pip3 install requests
   pip3 install playwright

Structure et data objects de LinkedIn

Avant de commencer d’extraire des données de LinkedIn, nous allons aborder dans la section qui suit la structure du site et l’identification des data objects que vous allez extraire. Dans le cadre de ce tutoriel, vous allez vous concentrer sur la collecte de données d’offres d’emploi, de profils d’utilisateurs, d’articles et de profils d’entreprise :

  • Les offres d’emploi contiennent des informations comme l’intitulé du poste, le lieu et la description du poste, et des informations sur l’entreprise.
  • Les informations sur un cours peuvent inclure le titre du cours, le professeur, la durée et la description.
  • Les données de l’entreprise peuvent inclure le nom de l’entreprise, son secteur d’activité, sa taille, son emplacement géographique et sa description.
  • Les articles sont rédigés par des professionnels et couvrent des sujets comme le développement professionnel et des informations sur un domaine.

Par exemple, si vous souhaitez mieux comprendre la structure HTML de la page Emplois de LinkedIn, suivez ces étapes :

  1. Accédez au site Web de LinkedIn et connectez-vous à votre compte.
  2. Cliquez sur l’icône Emplois dans la barre de navigation située en haut. Saisissez n’importe quel intitulé de poste (p. ex, « développeur frontend ») et appuyez sur Entrer.
  3. Choisissez une tâche dans la liste et effectuez un clic droit sur la souris, et cliquez sur Inspecter pour ouvrir les outils de développement du navigateur.
  4. Analysez la structure HTML pour identifier les balises et les attributs contenant les données que vous souhaitez extraire.
extracteur de données de LinkedIn

Extraire les données d’offres d’emploi

Commencez par extraire les données d’offres d’emploi de LinkedIn. Vous utiliserez Requests pour récupérer le contenu HTML de la page et BeautifulSoup pour analyser et extraire les données pertinentes.

Créez un nouveau fichier nommé scraper_LinkedIn_jobs.py et ajoutez le code suivant :

import requests
from bs4 import BeautifulSoup
url = 'https://www.linkedin.com/jobs/search?keywords=Frontend%20Developer&location=United%20States&pageNum=0'
response = requests.get(url)
if response.status_code == 200:
   soup = BeautifulSoup(response.text, 'html.parser')
   job_listings = soup.find_all('div', {'class':'job-search-card'})
   for job in job_listings:
       title = job.find('h3', {'class': 'base-search-card__title'}).text.strip()
       company = job.find('a', {'class': 'hidden-nested-link'}).text.strip()
       location = job.find('span', {'class': 'job-search-card__location'}).text.strip()
       anchor_tag = job.find('a', class_='base-card__full-link')
       href_link = anchor_tag['href']
       print(f"Title: {title}\nCompany: {company}\nLocation: {location}\nJob Link: {href_link}\n")
else:
   print("Failed to fetch job listings.")

Ce code collecte les offres d’emploi de la page de recherche LinkedIn concernant les postes de développeur frontend proposés aux États-Unis.

Remarque : dans l’URL définie, vous pouvez personnaliser la recherche d’emploi selon vos préférences à l’aide des paramètres de l’URL. Par exemple, vous pouvez remplacer location=United%20States par le pays de votre choix pour rechercher des offres d’emploi dans cette région spécifique. De même, vous pouvez modifier keywords=Frontend%20Developer et utiliser n’importe quel autre intitulé de poste qui vous intéresse, ce qui vous permet de rechercher des offres d’emploi en fonction de différents mots clés. De plus, vous pouvez ajuster « PageNum=0 » pour parcourir les différentes pages des résultats de recherche, afin d’explorer d’autres opportunités d’emploi. Ces paramètres vous offrent la flexibilité nécessaire pour personnaliser la recherche d’emploi en fonction des critères et préférences que vous voulez.

Exécutez le code depuis votre shell ou votre terminal à l’aide de la commande suivante :

python3 scraper_linkedIn_jobs.py

Vous devriez obtenir une liste des offres d’emploi avec l’intitulé, l’entreprise, le lieu et un lien vers l’offre d’emploi. Vos résultats devraient ressembler à ceci :

…output omitted…
Title: Frontend Engineer
Company: Klarity
Location: San Francisco, CA
Job Link: https://www.linkedin.com/jobs/view/desenvolvedor-front-end-at-pasquali-solution-3671519424?refId=JN%2FeM862Wu7qnbJd96Eoww%3D%3D&trackingId=kTSLczKp1q4aurZ5rSzRPQ%3D%3D&position=1&pageNum=0&trk=public_jobs_jserp-result_search-card

Title: Front-End Developer (Remote)
Company: Prevail Legal
Location: United States
Job Link: https://www.linkedin.com/jobs/view/desenvolvedor-front-end-at-pasquali-solution-3671519424?refId=JN%2FeM862Wu7qnbJd96Eoww%3D%3D&trackingId=kTSLczKp1q4aurZ5rSzRPQ%3D%3D&position=1&pageNum=0&trk=public_jobs_jserp-result_search-card
…output omitted…

Extraire des données de LinkedIn Learning

En plus de rechercher des offres d’emploi, vous pouvez également extraire des cours depuis la page LinkedIn Learning.

Créez un nouveau fichier nommé scraper_LinkedIn_courses.py et ajoutez le code suivant :

import requests
from bs4 import BeautifulSoup
url = 'https://www.linkedin.com/learning/search?trk=content-hub-home-page_guest_nav_menu_learning'
response = requests.get(url)
if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    course_listings = soup.find_all('li', {'class':'results-list__item'})
    for course in course_listings:
        title = course.find('h3', {'class': 'base-search-card__title'}).text.strip()
        created_by = course.find('h4', {'class': 'base-search-card__subtitle'}).text.strip()
        duration = course.find('div', {'class': 'search-entity-media__duration'}).text.strip()
        # Find the anchor tag containing the link
        anchor_tag = course.find('a', class_='base-card__full-link')
        # Extract the 'href' attribute value
        if anchor_tag:
            href_link = anchor_tag['href']
        else:
            print("Anchor tag not found.")
        print(f"Title: {title}\nCreated By: {created_by}\nDuration: {duration}\nCourse Link: {href_link}\n")
else:
    print("Failed to fetch course listings.")

Ici, vous utilisez Requests pour accéder à la page LinkedIn Learning et BeautifulSoup pour l’analyser. Vous cherchez les éléments li de la classe results-list__item, qui contient les listes de cours. Pour chaque cours, vous extrayez et imprimez le titre, le créateur, la durée et le lien. Si la requête initiale échoue, vous imprimez un message d’échec.

Exécutez le code depuis votre shell ou votre terminal à l’aide de la commande suivante :

python3 scraper_linkedIn_courses.py

Vous devriez obtenir une liste des cours avec leur titre, leur auteur et un lien vers le cours. Vos résultats ressembleront à ceci :

…output omitted…
Title: Define general intelligence
Created By: From: Introduction to Artificial Intelligence
Duration: 3m
Course Link: https://www.linkedin.com/learning/introduction-to-artificial-intelligence/define-general-intelligence?trk=learning-serp_learning-search-card_search-card

Title: Shortcut menus and the Mini toolbar
Created By: From: Excel Essential Training (Microsoft 365)
Duration: 4m
Course Link: https://www.linkedin.com/learning/excel-essential-training-microsoft-365-17231101/shortcut-menus-and-the-mini-toolbar?trk=learning-serp_learning-search-card_search-card

Title: Learning Excel: Data Analysis
Created By: By: Curt Frye
Duration: 3h 16m
Course Link: https://www.linkedin.com/learning/learning-excel-data-analysis-18868618?trk=learning-serp_learning-search-card_search-card

…output omitted…

Extraire des articles de LinkedIn

Vous pouvez également extraire les données des articles depuis la page Articles de LinkedIn.

Pour faire cela, créez un nouveau fichier nommé scraper_LinkedIn_articles.py et ajoutez le code suivant :

import requests
from bs4 import BeautifulSoup
url = 'https://www.linkedin.com/pulse/topics/home/?trk=guest_homepage-basic_guest_nav_menu_articles'
response = requests.get(url)
if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    article_listings = soup.find_all('div', {'class':'content-hub-entities'})
    for article in article_listings:
        title = article.find('h2', {'class': 'break-words'}).text.strip()
        description = article.find('p', {'class': 'content-description'}).text.strip()
        # Find the anchor tag containing the link
        anchor_tag = article.find('a', class_='min-w-0')
        # Extract the 'href' attribute value
        if anchor_tag:
            href_link = anchor_tag['href']
        else:
            print("Anchor tag not found.")
        print(f"Title: {title}\nDescription: {description}\nArticle Link: {href_link}\n")
else:
    print("Failed to fetch article listings.")

Dans ce code, vous utilisez Requests pour récupérer une page LinkedIn et BeautifulSoup pour l’analyser. Vous recherchez les éléments div de la classe content-hub-entities, qui contiennent les listes d’articles. Pour chaque article, vous extrayez et imprimez le titre, la description et le lien. Si la requête initiale échoue, un message d’échec s’affiche.

Exécutez le code depuis votre shell ou votre terminal à l’aide de la commande suivante :

python3 scraper_linkedIn_articles.py

Vous obtiendrez une liste d’articles avec leur titre, leur description et un lien vers chaque article. Vos résultats devraient ressembler à ceci :

…output omitted…
Title: What are some of the emerging leadership trends and theories that you should be aware of?
Description: Learn about the six emerging leadership styles and frameworks that can help you develop your leadership skills and potential in a changing and complex world.
Article Link: https://www.linkedin.com/advice/1/what-some-emerging-leadership-trends-theories

Title: What are the most effective strategies for handling a leadership transition?
Description: Learn six strategies to manage a leadership transition smoothly and successfully, from assessing the situation to planning for the future.
Article Link: https://www.linkedin.com/advice/0/what-most-effective-strategies-handling

Title: How do you combine quality assurance training with other learning initiatives?
Description: Learn some strategies and tips for integrating quality assurance training with other learning objectives and methods in your organization.
Article Link: https://www.linkedin.com/advice/0/how-do-you-combine-quality-assurance-training

…output omitted…

Tout le code de ce tutoriel est disponible dans ce repository sur GitHub.

Éléments à prendre en compte lors de l’extraction de données de LinkedIn

LinkedIn, comme de nombreux autres sites Web, utilise plusieurs techniques pour empêcher l’extraction automatique de ses données. Comprendre ces techniques peut vous aider à les contourner et à garantir le succès de vos tentatives d’extractions :

  • Pagination : LinkedIn affiche les résultats de recherche sous forme de pages. Pour récupérer toutes les données pertinentes, assurez-vous que votre script d’extraction de données gère la pagination.
  • Publicité : LinkedIn affiche des publicités dans différentes sections. Assurez-vous que votre script d’extraction de données cible les données réelles et évite d’extraire du contenu publicitaire.
  • Limitation du débit : LinkedIn surveille le nombre de demandes provenant d’une même adresse IP au cours d’une période donnée. Si le nombre de demandes dépasse une certaine limite, LinkedIn peut bloquer temporairement ou définitivement cette adresse IP.
  • CAPTCHA : LinkedIn peut imposer un CAPTCHA s’il détecte une activité inhabituelle provenant d’une adresse IP. Les CAPTCHA sont conçus pour être faciles à résoudre pour les humains, mais difficiles pour les robots, empêchant ainsi l’extraction automatique.
  • Exigences de connexion : certaines données sur LinkedIn ne sont accessibles que lorsque vous êtes connecté (c’est-à-dire les profils d’utilisateurs et les pages d’entreprise). Cela signifie que toute tentative d’extraction de ces données nécessiterait une connexion automatique, que LinkedIn pourrait détecter et bloquer.
  • Contenu dynamique : LinkedIn utilise JavaScript pour charger certains contenus de manière dynamique. Cela peut rendre l’extraction plus difficile, car les données peuvent ne pas être présentes dans le code HTML lors du chargement initial de la page.
  • robots.txt : le fichierrobots.txt de LinkedIn spécifie les parties du site auxquelles les robots d’exploration sont autorisés à accéder. Bien qu’il ne s’agisse pas à proprement parler d’une technique de prévention, le fait d’ignorer les directives de ce fichier peut entraîner le blocage de votre adresse IP.

N’oubliez pas que même s’il est techniquement possible de contourner ces techniques, cela peut enfreindre les Conditions d’utilisation de LinkedIn et entraîner le bannissement de votre compte. Assurez-vous toujours que vos activités d’extraction sont légales et éthiques.

Une meilleure option : utiliser Bright Data pour extraire des données de LinkedIn

Bien que le web scraping manuel fonctionne pour l’extraction de données à petite échelle, il devient chronophage et inefficace à grande échelle. Bright Data offre une alternative plus simple et plus efficace, vous permettant d’accéder facilement à de grandes quantités de données de LinkedIn.

Bright Data propose deux produits principaux pour le web scraping :

  • Scraping Browser : Scraping Browser est une solution basée sur un navigateur qui vous permet d’interagir avec les sites Web comme un utilisateur normal. Il gère le rendu JavaScript, les requêtes AJAX et d’autres éléments complexes, ce qui le rend idéal pour l’extraction de données de sites Web dynamiques, comme LinkedIn.
  • Datasets de LinkedIn : les datasets de LinkedIn sont des ensembles de données pré-collectés et structurés contenant des données de LinkedIn, dont des offres d’emploi, des profils d’utilisateurs et des profils d’entreprise. Vous pouvez accéder aux données et les télécharger directement depuis la plateforme Bright Data.

Configurez votre compte Bright Data

Pour accéder à l’ensemble de données de LinkedIn sur la plateforme Bright Data, suivez les étapes suivantes :

Créez un compte sur le site Web de Bright Data en cliquant sur Commencer l’essai gratuit et en suivant les instructions.

Une fois connecté, cliquez sur l’icône de carte de crédit, dans le panneau de navigation de gauche, pour accéder à la page Facturation. Ajoutez ensuite un mode de paiement pour activer votre compte :

mode de paiement

Cliquez ensuite sur l’icône en forme d’épingle pour ouvrir la page Proxys et infrastructure de scraping. Sélectionnez Scraping Browser > Commencer :

Proxys et infrastructure de scraping

Donnez un nom à votre solution et cliquez sur le bouton Ajouter :

 Bouton Ajouter

Sélectionnez Paramètres d’accès et notez votre nom d’utilisateur, votre hôte et votre mot de passe, car vous en aurez besoin à l’étape suivante :

Paramètres d’accès

Après avoir réalisé toutes ces étapes, vous pouvez passer à la section suivante.

Extraire des données d’entreprise de LinkedIn à l’aide de Scraping Browser

Pour extraire les données de la page d’une entreprise sur LinkedIn, créez un nouveau fichier nommé scraper_LinkedIn_bdata_company.py et ajoutez le code suivant :

import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup

username='YOUR_BRIGHTDATA_USERNAME'
password='YOUR_BRIGHTDATA_PASSWORD'
auth=f'{username}:{password}'
host = 'YOUR_BRIGHTDATA_HOST'
browser_url = f'wss://{auth}@{host}'

async def main():
   async with async_playwright() as pw:
       print('connecting')
       browser = await pw.chromium.connect_over_cdp(browser_url)
       print('connected')
       page = await browser.new_page()
       print('goto')
       await page.goto('https://www.linkedin.com/company/spacex/', timeout=120000)
       print('done, evaluating')
      
       # Get the entire HTML content
       html_content = await page.evaluate('()=>document.documentElement.outerHTML')
      
       # Parse the HTML with Beautiful Soup
       soup = BeautifulSoup(html_content, 'html.parser')

       # Extract the 'About us' description
       description_element = soup.select_one('.core-section-container[data-test-id="about-us"] p[data-test-id="about-us__description"]')
       description = description_element.text if description_element else None
       print('Description:')
       print(description)

       # Extract the 'Company size'
       company_size_element = soup.select_one('div[data-test-id="about-us__size"] dd')
       company_size = company_size_element.text.strip() if company_size_element else None
       print('Company size:')
       print(company_size)

       await browser.close()

# Run the async function
asyncio.run(main())

Dans ce code, vous utilisez Playwright pour l’automatisation du navigateur. Vous vous connectez à un navigateur Chromium via un proxy, vous accédez à la page de l’entreprise SpaceX et vous extrayez la description À propos de nous et Taille de l’entreprise.

Pour obtenir le contenu HTML, vous utilisez la méthode d’évaluation de Playwright, puis vous l’analysez avec Beautiful Soup pour trouver les éléments spécifiques, avant d’imprimer les informations extraites. Vous tirez parti des fonctionnalités asynchrones de Playwright en définissant une fonction asynchrone appelée main (), et vous démarrez l’exécution du script avec asyncio.run(main ()).

Remarque : assurez-vous de remplacer YOUR_BRIGHTDATA_USERNAME, YOUR_BRIGHTDATA_PASSWORD et YOUR_BRIGHTDATA_HOST par les identifiants de connexion corrects et spécifiques de votre compte Bright Data. Cette étape est cruciale pour vous authentifier et accéder à votre compte avec succès.

Ouvrez votre shell ou votre terminal et exécutez votre code à l’aide de la commande suivante :

python3 scraper_linkedIn_bdata_company.py

Vous devriez obtenir un résultat qui ressemble à ceci :

…output omitted…
Description:
SpaceX designs, manufactures and launches the world's most advanced rockets and spacecraft. The company was founded in 2002 by Elon Musk to revolutionize space transportation, with the ultimate goal of making life multiplanetary. 

SpaceX has gained worldwide attention for a series of historic milestones. It is the only private company ever to return a spacecraft from low-Earth orbit, which it first accomplished in December 2010. The company made history again in May 2012 when its Dragon spacecraft attached to the International Space Station, exchanged cargo payloads, and returned safely to Earth — a technically challenging feat previously accomplished only by governments. Since then Dragon has delivered cargo to and from the space station multiple times, providing regular cargo resupply missions for NASA.

For more information, visit www.spacex.com.
Company size:
1,001-5,000 employees

L’approche initiale que vous avez utilisée pour extraire des données de LinkedIn peut présenter des difficultés, notamment en ce qui concerne les fenêtres contextuelles et les reCAPTCHA, ce qui peut entraîner des blocages de code. Cependant, l’utilisation de Scraping Browser de Bright Data Scraping vous permet de surmonter ces obstacles, en garantissant une extraction ininterrompue.

Ensemble de données LinkedIn de Bright Data

Une autre option alternative à l’extraction manuelle des données de LinkedIn consiste à acheter des ensembles de données de LinkedIn, qui vous donneront accès à des données personnelles précieuses, notamment des profils d’utilisateurs et des informations supplémentaires. L’utilisation de l’ensemble de données de LinkedIn de Bright Data élimine le recours au web scraping manuel, permet de gagner du temps et fournit des données structurées prêtes à être analysées.

Pour savoir quels ensembles de données sont disponibles, accédez à votre tableau de bord Bright Data, puis cliquez sur Ensembles de données et Web Scraper IDE dans la barre de navigation située à gauche, et sélectionnez Ensembles de données de profils de personnes inscrites sur LinkedIn (données Web publiques) :

Ensembles de données de profils de personnes inscrites sur LinkedIn (données Web publiques) :

Vous pouvez désormais appliquer des filtres pour affiner vos choix et obtenir des données spécifiques répondant à vos critères, puis cliquer sur « Options d’achat » pour voir combien cela coûte.

La tarification est basée sur le nombre d’enregistrements que vous choisissez, ce qui vous permet d’adapter votre achat en fonction de vos besoins et de votre budget. En choisissant d’acheter ces ensembles de données, vous pouvez simplifier considérablement votre workflow, en évitant les efforts manuels liés à l’extraction et à la collecte des données :

extraction et collecte de données

Conclusion

Dans cet article, vous avez appris à extraire manuellement des données de LinkedIn à l’aide de Python et vous avez découvert Bright Data, une solution qui simplifie et accélère le processus d’extraction de données. Que vous collectiez des données pour des études de marché, l’acquisition de talents ou pour réaliser une analyse concurrentielle, ces outils et techniques peuvent vous aider à recueillir les informations dont vous avez besoin.

N’oubliez pas que si l’extraction manuelle peut constituer un outil puissant, Bright Data propose une alternative plus simple et plus efficace. Grâce à Scraping Browser et à son ensemble de données de LinkedIn déjà extraites, Bright Data peut vous faire gagner du temps et vous permettre de vous concentrer sur ce qui compte vraiment : utiliser les données pour prendre des décisions éclairées. Parlez à l’expert en données de Bright Data pour trouver la solution qui vous convient.