Passer au contenu

Votre guide étape par étape pour récupérer les données d'Indeed

Salut! Vous cherchez à extraire des offres d’emploi d’Indeed ? Vous êtes arrivé au bon endroit.

Indeed est l'un des plus grands moteurs de recherche d'emploi sur le Web, avec plus de 250 millions visiteurs uniques par mois. Il s'agit d'une mine de données considérable sur les offres d'emploi, les salaires, les profils d'entreprise et bien plus encore.

Malheureusement, les API d'Indeed n'exposent pas entièrement toutes ces données. C'est là qu'intervient le web scraping.

Dans ce guide, je vais vous expliquer étape par étape comment gratter Indeed à l'aide de Python. Je partagerai des extraits de code que vous pouvez utiliser, ainsi que des conseils pour gratter avec précision et éviter d'être bloqué.

J'expliquerai également comment automatiser le scraping pour qu'il s'exécute quotidiennement, hebdomadairement ou mensuellement. De cette façon, vous pouvez conserver automatiquement les données de votre offre d’emploi !

À la fin, vous supprimerez les offres d’emploi d’Indeed comme un pro. Allons creuser !

Pourquoi supprimer les offres d’emploi Indeed ?

Avant de nous salir les mains avec du code Python, parlons de why vous souhaiterez peut-être d’abord récupérer les données d’Indeed.

Voici quelques idées:

  • Étude de marché – Analyser les tendances des offres d’emploi pour identifier les compétences croissantes ou les rôles en demande. Indeed dispose de données sur des millions d'ouvertures dans tous les secteurs.

  • Intelligence concurrentielle – Découvrez les salaires et avantages sociaux proposés par les entreprises pour des postes similaires. Utile pour évaluer vos propres programmes de rémunération.

  • Moteurs de recherche d'emploi – Créez des sites d'emploi personnalisés en utilisant les données Indeed filtrées par mots-clés ou emplacements spécifiques.

  • Outils de recrutement – Suivez les nouvelles ouvertures correspondant aux compétences des candidats pour faire apparaître les emplois pertinents.

  • Reprendre l'analyse – Extrayez des mots-clés et des compétences des descriptions de poste pour fournir des suggestions pour améliorer les curriculum vitae et les lettres de motivation.

Ce ne sont là que quelques exemples : avec des données riches et structurées sur les offres d'emploi, les possibilités sont infinies !

Voyons maintenant comment extraire réellement ces données à l'aide du web scraping.

Avant de plonger dans le codage, je souhaite aborder rapidement la légalité du web scraping. Je sais que certaines personnes ont des inquiétudes ici.

La réponse courte est : extraire les données publiques d’Indeed est parfaitement légal dans la plupart des cas, à condition de suivre quelques règles de base :

  • Accédez uniquement aux pages publiques – n’essayez pas de récupérer les données ou les connexions des utilisateurs privés.

  • Ne surchargez pas les serveurs d'Indeed en effectuant un scraping trop agressif. Suivez des pratiques d'exploration polies.

  • Respectez les conditions d'utilisation d'Indeed. Ils n’interdisent pas spécifiquement le web scraping.

  • Évitez de copier textuellement de gros extraits de texte pour respecter les droits d’auteur. Paraphraser, c’est bien.

  • Ne republiez aucune donnée privée, personnelle ou sensible récupérée.

Si vous suivez ces directives de bon sens, le web scraping Indeed pour les données publiques d'offres d'emploi est légalement autorisé dans la plupart des pays.

Bien sûr, je recommande toujours de consulter un avocat si vous avez des inquiétudes, étant donné que les lois varient. Mais vous pouvez gratter Indeed en toute confiance tant que vous restez éthique !

Ok, passons aux choses amusantes : le vrai code !

Supprimer les listes Indeed avec Python

Lors du scraping de grands sites comme Indeed, Python est un excellent choix grâce à des bibliothèques comme Demandes, Belle soupe ainsi que Sélénium.

Je vais vous guider à travers un script pour :

  • Extraire les offres d'emploi correspondant aux recherches par mots clés et par emplacement

  • Analyser les détails tels que les titres de poste, les salaires et les descriptions

  • Automatisez la pagination pour récupérer toutes les annonces sur plusieurs pages

Commençons!

Importer des bibliothèques

Nous utiliserons Demandes pour récupérer des pages, Belle soupe pour l'analyse, Temps pour accélérer, et Pandas pour stocker des données :

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd

Les demandes et BeautifulSoup sont tout ce que vous vraiment besoin. Mais Pandas aide à gérer les données, tandis que Time limite les requêtes.

Définir les paramètres de recherche

Tout d’abord, définissons les offres d’emploi que nous souhaitons. Spécifiez des mots-clés, un emplacement et d'autres filtres :

keywords = "Remote Software Engineer"
location = "United States" 
salary_min = 100000

Cela cible les emplois bien rémunérés dans le domaine des logiciels à distance aux États-Unis. Adaptez-vous aux critères souhaités.

Récupérer la page des résultats de recherche

Une fois les paramètres définis, nous demanderons l'URL, en transmettant nos mots-clés et notre emplacement :

BASE_URL = "https://www.indeed.com/jobs?" 

params = {
  ‘q‘: keywords,
  ‘l‘: location,
  ‘minSalary‘: salary_min,
  ‘remotejob‘: ‘remote‘ # Filter remote jobs  
}

print(f‘Fetching job listings for {keywords} in {location}...‘)

res = requests.get(BASE_URL, params=params)
res.raise_for_status() # Raise exception for 4xx/5xx

Ceci effectue la requête de recherche initiale, en filtrant par nos mots-clés et paramètres.

Analyser les résultats avec BeautifulSoup

Nous allons ensuite analyser le code HTML de la page de résultats de recherche pour extraire les données de liste de haut niveau :

soup = BeautifulSoup(res.text, ‘html.parser‘)

listings = [] # List to store listings

for div in soup.find_all(‘div‘, class_=‘job_seen_beacon‘):

  title = div.find(‘h2‘).text.strip()

  company = div.find(‘span‘, class_=‘companyName‘).text.strip()

  location = div.find(‘div‘, class_=‘companyLocation‘).text.strip()

  # Append listing data    
  listings.append({
    ‘title‘: title,
    ‘company‘: company, 
    ‘location‘: location
  })

Ici, nous localisons chaque annonce div, récupérez les champs clés comme le titre et l'entreprise, et stockez-les dans notre listings liste.

Gérer la pagination

Indeed répartit les résultats sur plusieurs pages. Nous devrons parcourir chacun :

# Track page number 
current_page = 0

while True:

  # Increment page
  current_page += 1 

  print(f‘Scraping page {current_page}...‘)

  # Build URL for next page
  next_page_url = BASE_URL + f‘&start={current_page*10}‘  

  # Fetch page HTML
  res = requests.get(next_page_url, params=params)

  # Parse HTML
  soup = BeautifulSoup(res.text, ‘html.parser‘)   

  # Return if last page
  if not soup.find(‘a‘, {‘aria-label‘: ‘Next‘}):
    print(‘Reached last page!‘)
    break

  # Extract listings
  for div in soup.find_all(...):
    # Extract listing data

  # Sleep to throttle requests  
  time.sleep(3) 

print(f‘Scraped {len(listings)} listings‘)

Ici, nous incrémentons continuellement le numéro de page, récupérons la page suivante, extrayons les listes et effectuons une boucle jusqu'à atteindre la dernière page.

Ajout d'un court time.sleep() la limitation permet d'éviter de surcharger les serveurs d'Indeed.

Grattez les détails de l'annonce

Jusqu'à présent, nous avons extrait des données de haut niveau telles que des titres et des entreprises. Pour obtenir des détails tels que les salaires et les descriptions, nous supprimerons chaque URL d'annonce :

from selenium import webdriver

driver = webdriver.Chrome()

# Loop through listings
for listing in listings:

  print(f‘Getting details for {listing["title"]}‘)

  # Load listing URL
  url = listing[‘url‘]  
  driver.get(url)

  # Extract key fields
  desc = driver.find_element_by_id(‘jobDescriptionText‘).text
  salary = driver.find_element_by_class_name(‘salary-snippet‘).text

  listing[‘desc‘] = desc
  listing[‘salary‘] = salary

  # Sleep to throttle
  time.sleep(2)

driver.quit()  

Ici, Selenium fournit un navigateur complet pour afficher des pages contenant beaucoup de JavaScript. Nous chargeons chaque URL et extrayons des champs supplémentaires comme la description et le salaire.

Astuce Pro: Pensez à utiliser un service proxy pour éviter les blocages IP lors de l'utilisation de Selenium à grande échelle.

Et c'est tout! Avec ces étapes, vous pouvez supprimer automatiquement des milliers d’offres d’emploi d’Indeed.

Le résultat final est des données de travail structurées que vous pouvez analyser ou exporter vers des outils comme Excel. Regardons ensuite quelques exemples.

Que pouvez-vous faire avec les données Indeed récupérées ?

Maintenant que nous pouvons récupérer les fiches Indeed, que pouvons-nous réellement faire avec ces données ?

Voici quelques idées:

Exporter vers Excel pour analyse

df = pandas.DataFrame(listings)
df.to_excel(‘indeed_listings.xlsx‘, index=False)

Pandas facilite l'exportation des résultats vers Excel. Cela permet un filtrage, des tableaux croisés dynamiques et des formules puissants.

Données Indeed dans Excel

Vous pouvez analyser les tendances selon les sites, les salaires, les compétences et bien plus encore.

Créer des bases de données de recherche d'emploi

import sqlite3

# Connect to SQLite database
conn = sqlite3.connect(‘jobs.db‘)

# Create table
conn.execute(‘‘‘
  CREATE TABLE jobs (
    title TEXT,
    company TEXT, 
    description TEXT,
    salary REAL  
  );
‘‘‘)

# Insert listings into database
for listing in listings:
  conn.execute("""
    INSERT INTO jobs VALUES (
      ?, ?, ?, ?
    )""", (listing[‘title‘], listing[‘company‘], 
            listing[‘desc‘], listing[‘salary‘]))

conn.commit()
conn.close()

SQLite fournit une base de données simple pour stocker des listes pour une recherche personnalisée. Intégrez Flask pour créer votre propre site d'emploi !

Envoyez par e-mail les listes pertinentes aux candidats

import smtplib
from email.message import EmailMessage

# Connect to SMTP server 
smtp = smtplib.SMTP(‘smtp.domain.com‘)

for listing in listings:

  # Check if listing matches candidate skills  

  if match:

    msg = EmailMessage()
    msg[‘Subject‘] = f‘New job for you - {listing["title"]}‘  
    msg[‘From‘] = ‘[email protected]‘
    msg[‘To‘] = ‘[email protected]‘
    msg.set_content(listing[‘desc‘])

    # Send listing to candidate
    smtp.send_message(msg)

smtp.quit()

Python facilite l'envoi automatique par courrier électronique aux candidats de nouvelles annonces correspondant à leurs compétences et intérêts.

Ceci n’est qu’un petit échantillon – avec des données sur des millions d’annonces, les possibilités sont infinies !

Voyons maintenant comment exécuter ce scraper automatiquement.

Planification quotidienne des grattages Indeed

Bien que le scraping Indeed en temps réel soit utile, la configuration est encore plus précieuse. scrapes automatisées et programmées pour garder vos données à jour.

Voici deux bonnes options pour exécuter le scraper selon un calendrier récurrent fixe :

cron Jobs

Un moyen simple d'automatiser les scripts Python est cron, un utilitaire Linux standard.

Ajoutez une entrée comme celle-ci pour qu'elle s'exécute quotidiennement à 8h :

0 8 * * * python /home/user/indeedScraper.py

Vous pouvez programmer des récurrences complexes. Mais cron manque de rapports si les grattages échouent.

Plateformes de grattage

Pour une planification et une automatisation plus robustes, je recommande d'utiliser une plateforme de scraping dédiée comme Scrapy or Apifier.

Ceux-ci fournissent une automatisation du navigateur et du proxy pour gérer les CAPTCHA, les blocs et JavaScript. Et ils intègrent une planification simple des tâches cron.

Vous recevez également des alertes par e-mail, des analyses de performances et des options d'intégration. Ils simplifient grandement l'automatisation !

Voici une comparaison rapide :

cron JobsPlateformes de grattage
PrixTest d'anglaisForfaits payés
Proxy et navigateurs sans têteBesoin d'un code personnaliséFonctionnalités incluses
PlanificateurRécidive de baseOptions avancées
Surveillance et alertesAucunE-mails et tableau de bord
Stockage des résultatsManipulation manuelleStockage et exportations intégrés

Pour les sites volumineux et complexes comme Indeed, je recommande d'utiliser une plateforme dédiée. La fiabilité et les fonctionnalités supplémentaires valent le coût lors du scraping à grande échelle.

Résumons

Dans ce guide, vous avez appris :

  • Constat scraping Indeed est utile pour les études de marché, la recherche d’emploi et les outils de recrutement.

  • Comment extraire des annonces en imitant les requêtes de recherche en Python.

  • des pratiques d’excellence; comme la limitation des demandes et l'utilisation de proxys pour éviter les blocages.

  • Comment analyser les détails comme les salaires et les descriptions des pages de liste.

  • Options d'automatisation comme cron et des plateformes de scraping dédiées pour garder vos données à jour.

Les exemples de code ci-dessus devraient vous donner un modèle pour commencer à récupérer vos propres données Indeed. N'hésitez pas à le modifier et à le développer pour votre cas d'utilisation !

N'oubliez pas de respecter les conditions d'utilisation d'Indeed, d'éviter de scraper de manière trop agressive et de suivre une bonne hygiène de web scraping pour rester du bon côté de la loi.

J'espère que ce guide vous a donné un aperçu complet de la façon de supprimer efficacement Indeed à l'aide de Python. L'automatisation de ces étapes vous permet de tirer parti de l'incroyable mine de données d'offres d'emploi d'Indeed.

Faites-moi savoir si vous avez d'autres questions ! Je suis toujours heureux de discuter davantage des meilleures pratiques de web scraping.

Bonne chance avec votre projet de scraping Indeed !

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *