Guide pour récupérer les données de LinkedIn avec Python

Commentaires: 0

L'exploitation des données de LinkedIn peut s'avérer extrêmement précieuse pour plusieurs raisons :

  • Analyse du marché de l'emploi : analyser les tendances dans les offres d'emploi, telles que les compétences et les secteurs les plus demandés ;
  • Recrutement : recueillez des données sur les offres d'emploi afin d'éclairer les stratégies d'embauche ;
  • Recherche sur les concurrents : surveiller les modèles et les stratégies d'embauche des concurrents.

L'article mettra l'accent sur des techniques et des stratégies importantes, notamment sur l'importance d'éviter la détection via les proxys et les en-têtes. La bibliothèque requests sera utilisée pour effectuer des requêtes HTTP, tandis que lxml sera employé pour analyser le contenu HTML.

Mise en place de l'environnement

Avant de commencer, assurez-vous que Python est installé sur votre machine.

Installez les bibliothèques nécessaires à l'aide de pip :


pip install requests
pip install lxml

Démarrer avec le scraper

Voici un exemple de code complet pour le scraping des listes d'emploi de LinkedIn à l'aide de Python :

Importer des bibliothèques

Nous aurons besoin de plusieurs bibliothèques Python :

  • requests : Pour effectuer des requêtes HTTP afin de récupérer des pages web.
  • lxml : Pour l'analyse du contenu HTML.
  • csv : Pour écrire les données extraites dans un fichier CSV.

import requests
from lxml import html
import csv
import random

Définir l'URL de recherche d'emploi

Commencez par définir l'URL de recherche d'emploi LinkedIn que vous souhaitez récupérer.


url = 'https link'

Chaînes d'agents utilisateurs et proxys

Pour scraper efficacement LinkedIn, il est essentiel d'utiliser les bons en-têtes, en particulier l'en-tête User-Agent, afin d'imiter les requêtes provenant d'un véritable navigateur.


user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]

Les fournisseurs de proxy modernes prennent souvent en charge la rotation interne, ce qui signifie qu'ils effectuent automatiquement la rotation des adresses IP pour vous. Il n'est donc pas nécessaire de sélectionner manuellement des serveurs mandataires à partir d'une liste. Toutefois, à titre d'exemple, voici comment1 vous pourriez gérer la rotation des serveurs mandataires en cas de besoin :


proxies = {
    'http': random.choice(proxies),
    'https': random.choice(proxies)
}

En-têtes pour les demandes

Le succès du scraping sur LinkedIn dépend de la configuration correcte des en-têtes qui émulent le comportement d'un vrai navigateur. Des en-têtes correctement configurés permettent non seulement de contourner les systèmes de protection anti-bots, mais aussi de réduire les risques de blocage de vos activités de scraping.


headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'dnt': '1',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Linux"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
}

Initialiser le stockage des données

Pour collecter et stocker efficacement les informations relatives aux offres d'emploi, vous devez commencer par initialiser un magasin de données. En Python, cela implique généralement la création d'une liste vide. Cette liste servira de conteneur de stockage où vous pourrez ajouter les détails de l'offre d'emploi au fur et à mesure qu'ils sont extraits du contenu HTML. Cette méthode garantit que les informations sont systématiquement collectées et facilement accessibles pour un traitement ou une analyse ultérieurs.

job_details = []

Imprimer le contenu HTML

Après avoir envoyé une requête HTTP GET, l'étape suivante consiste à analyser le contenu HTML à l'aide de la bibliothèque lxml. Cela nous permettra de naviguer dans la structure HTML et d'identifier les données que nous voulons extraire.


# Définir un User-Agent aléatoire et un proxy avec la méthode d'autorisation IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
    'http': IP:PORT,
    'https': IP:PORT
}

# Envoyer une requête HTTP GET à l'URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)

Extraire les données relatives à l'emploi

Une fois le contenu HTML analysé, nous pouvons extraire des informations spécifiques sur l'emploi, telles que le titre, le nom de l'entreprise, le lieu et l'URL de l'emploi, à l'aide de requêtes XPath. Ces détails sont stockés dans un dictionnaire et ajoutés à une liste.


# Extraire les détails de l'emploi à partir du contenu HTML
for job in parser.xpath('//ul[@class="jobs-search__results-list"]/li'):
    title = ''.join(job.xpath('.//div/a/span/text()')).strip()
    company = ''.join(job.xpath('.//div/div[2]/h4/a/text()')).strip()
    location = ''.join(job.xpath('.//div/div[2]/div/span/text()')).strip()
    job_url = job.xpath('.//div/a/@href')[0]
    
    job_detail = {
        'title': title,
        'company': company,
        'location': location,
        'job_url': job_url
    }
    job_details.append(job_detail)

Enregistrer les données au format CSV

Après avoir collecté les données relatives aux travaux, enregistrez-les dans un fichier CSV.


with open('linkedin_jobs.csv', 'w', newline='', encoding='utf-8') as csvfile:
    fieldnames = ['title', 'company', 'location', 'job_url']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for job_detail in job_details:
        writer.writerow(job_detail)

Code complet

Voici le code complet, combinant toutes les sections ci-dessus :


from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv

# Spécifier l'adresse du serveur proxy avec le nom d'utilisateur et le mot de passe
proxy_address = ""
proxy_username = ""
proxy_password = ""

# Configurer les options de Chrome avec le proxy et l'authentification
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

# Créer une instance de WebDriver avec selenium-wire
driver = wiredriver.Chrome(options=chrome_options)

url = 'https link'

# Réalisez vos automatisations Selenium avec les capacités améliorées de selenium-wire
driver.get(url)

job_details = []

all_elements = driver.find_elements(By.XPATH,
                                   '//*[@id="main-content"]/section/ul/li')

for i in all_elements:
   title = i.find_element(By.XPATH,
                          './/div/div/h3').text
   company = i.find_element(By.XPATH, './/div/div[2]/h4/a').text
   location = i.find_element(By.XPATH, './/div/div[2]/div/span').text
   job_url = i.find_element(By.XPATH,
                            './/div/a').get_attribute('href')

   job_detail = {
       'title': title,
       'company': company,
       'location': location,
       'job_url': job_url
   }
   job_details.append(job_detail)

with open('linkedin_jobs.csv', 'w', newline='', encoding='utf-8') as csvfile:
   fieldnames = ['title', 'company', 'location', 'job_url']
   writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
   writer.writeheader()
   for job_detail in job_details:
       writer.writerow(job_detail)

driver.quit()

L'extraction de données de LinkedIn à l'aide de Python avec les bibliothèques requests et lxml offre un moyen puissant d'analyser le marché de l'emploi et de recruter du personnel. Pour garantir un processus de scraping fluide, des proxys de centres de données à haute vitesse sont utilisés, ainsi que des proxys de fournisseurs d'accès Internet avec un facteur de confiance plus élevé, ce qui réduit le risque de blocage des actions automatisées.

Commentaires:

0 Commentaires