Web Scraping pour les offres d'emploi - Guide ultime 2023
post-titre

La récupération des offres d'emploi sur le Web est un raccourci alternatif permettant aux demandeurs d'emploi de créer une base de données des offres d'emploi actuelles. Selon Randstad, la recherche d'un emploi peut durer en moyenne cinq à six mois, entre le moment où une candidature est déposée et celui où le poste est pourvu. Et si vous disposiez d'une solution qui vous évite d'avoir à surfer sur tous les portails d'emploi et à choisir celui qui vous convient ? 

Cet article va vous faire voyager en vous expliquant comment faire du web scraping pour les offres d'emploi. Vous êtes donc sur le marché du travail et vous essayez de trouver le meilleur emploi. Mais vous voulez jouer plus intelligemment et non plus durement. Pourquoi ne pas créer un scraper Web qui collecte et analyse les offres d'emploi pour vous. Une fois que vous l'aurez configuré, il vous fournira des données riches dans un format bien ordonné, de sorte que vous n'aurez pas à les vérifier manuellement encore et encore. Commençons.

Qu'est-ce que le Web Scraping pour les offres d'emploi ?

Le Web scraping pour les offres d'emploi est une solution qui collecte automatiquement les données de plusieurs portails d'emploi et réduit le temps passé à récupérer les données de chaque site Web. Disposer d'un tel outil, qui peut vous fournir une base de données complète des offres d'emploi, vous simplifiera la tâche à l'extrême. Tout ce que vous avez à faire est de filtrer les offres qui vous conviennent et de poursuivre le processus de candidature. 

Vous êtes donc sur le marché du travail et vous essayez de trouver le meilleur emploi. Mais vous voulez jouer plus intelligemment et non plus durement. Pourquoi ne pas créer un scraper Web qui collecte et analyse les offres d'emploi pour vous ? Une fois que vous l'aurez configuré, il vous fournira des données riches dans un format bien ordonné, de sorte que vous n'aurez pas à les vérifier manuellement encore et encore. Commençons.

[Avertissement ! De nombreux sites web peuvent restreindre l'extraction de données de leurs pages. Les utilisateurs peuvent être soumis à des problèmes juridiques selon l'endroit et la manière dont ils tentent d'extraire les informations. Il faut donc être extrêmement prudent lorsqu'on consulte des sites qui hébergent ses données. Par exemple, Facebook, Linked In et Craiglist s'offusquent parfois si des données sont extraites de leurs pages. Donc si vous voulez gratter des données, faites-le à vos risques et périls].

Il s'agit d'un article très basique dans lequel nous verrons les bases du web scraping en extrayant des informations utiles concernant les emplois liés à la "Data Science" sur indeed.com. Nous allons écrire un programme étonnant qui met à jour les emplois plusieurs fois manuellement. Certaines bibliothèques utiles qui seront très utiles lors de la construction de ce scraper sont "requests" et "BeautifulSoup".

Comprendre l'URL et la structure de la page

Tout d'abord, jetons un coup d'œil à l'exemple de page que nous allons extraire d'Indeed

La façon dont l'URL est structurée est importante :

  • notez que "q=" commence la chaîne pour le champ "quoi" de la page, en séparant les termes de recherche par "+" (par exemple, recherche d'emplois de "data+scientifique")
  • lorsque vous spécifiez le salaire, il analysera les virgules dans le chiffre du salaire, ainsi le début du salaire sera précédé de %24 et ensuite le nombre avant la première virgule, il sera ensuite interrompu par %2C et continuera avec le reste du nombre (par exemple, %2420%2C000 = 20 000 $)
  • La note "&l=" commence la chaîne de caractères pour la ville d'intérêt, en séparant les termes de recherche avec "+" si la ville est plus d'un mot (par exemple, "New+York").
  • note "&start=" note le résultat de recherche où vous voulez commencer (par exemple, commencer par regarder le 10ème résultat)

Cette structure d'URL nous sera d'une aide précieuse lorsque nous continuerons à construire le scraper et à recueillir des données à partir de plusieurs pages. 

Récupération d'offres d'emploi sur le Web - Comprendre l'URL et la structure de la page

Chrome peut examiner la structure HTML de la page en cliquant avec le bouton droit de la souris sur celle-ci et en utilisant l'option inspecter l'élément. Un menu apparaîtra sur la droite, et il montrera également les balises des éléments imbriqués, et lorsque vous placerez votre curseur sur ces éléments, il mettra en évidence cette partie de l'écran.  

Recherche d'offres d'emploi sur Internet

Pour cet article, je suppose que vous connaissez les bases du HTML comme les balises, les divs, etc. mais heureusement, vous n'avez pas besoin de tout savoir. Vous devez juste comprendre la structure de la page et la hiérarchie des différents composants.

Commencer à utiliser le grattoir

Maintenant, nous avons analysé la structure de la page. Cela va nous aider à construire du code en fonction de ces informations pour extraire les données de notre choix. Commençons par importer nos bibliothèques. Notez qu'ici nous importons également "time", ce qui nous aidera à ne pas surcharger le serveur du site lors de l'extraction des informations.

Importation des demandes
import bs4
bs4 import BeautifulSoup
import pandas as pd
import time

Nous allons d'abord cibler la page unique pour retirer chaque élément d'information que nous voulons,

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#réaliser une requête de l'URL indiquée ci-dessus :
page = requests.get(URL)
#spécifier le format désiré de "page" en utilisant l'analyseur html - cela permet à python de lire les différents composants de la page, plutôt que de la traiter comme une longue chaîne.
soup = BeautifulSoup(page.text, "html.parser")
#imprime la soupe dans un format arborescent plus structuré qui facilite la lecture.
print(soupe.prettify())

L'utilisation de prettify permet d'avoir une vue d'ensemble du codage HTML de la page et fournit un résultat comme celui-ci,

Recherche d'offres d'emploi sur le Web - Code
Récupération d'offres d'emploi sur le Web - Premiers pas

 Maintenant, toutes les informations sur la page qui nous intéresse se trouvent dans notre variable "soupe". Nous devons creuser davantage dans le code pour itérer à travers les différentes balises et sous-balises afin de capturer les informations requises.

Obtenir les éléments de base des données

Cinq points essentiels pour chaque offre d'emploi,

  1. Titre du poste.
  2. Nom de la société.
  3. Emplacement.
  4. Salaire.
  5. Résumé du poste.

Si nous regardons la page, il y a 15 offres d'emploi. Par conséquent, notre code devrait également générer 15 éléments différents. Cependant, si le code en fournit moins que cela, nous pouvons nous référer à la page et voir ce qui n'est pas capturé.

Obtenir le titre du poste

As can be seen, the entirety of each job posting is under <div> tags, with an attribute “class” = “row result.”

Further, we could also see that job titles are under <a> tags, with the attribute “title = (title)”. One can see the value of the tag’s attribute with tag[“attribute”], so I can use it to find each posting’s job title.

Si nous résumons, la fonction que nous allons voir implique les trois étapes suivantes,

  1. Pulling out all the <div> tags with class including “row”.
  2. Identifying <a> tags with attribute “data-tn-element”:”jobTitle”
  3. For each of these <a> tags, find attribute values “title”
def extract_job_title_from_result(soup): 
  jobs = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    for a in div.find_all(name="a", attrs={"data-tn-element":"jobTitle"}):
      jobs.append(a["title"])
  return(jobs)
extract_job_title_from_result(soup)

Ce code donnera un résultat comme celui-ci,

Recherche d'offres d'emploi sur le Web - Obtenir le titre du poste

Obtenir le nom de la société

Getting company names can be a bit tricky because most of them are appearing in <span> tags, with “class”:” company”.  They are also housed in <span> tags with “class”:” result-link-source”.

Nous utiliserons des instructions if/else pour extraire les informations sur l'entreprise à chacun de ces endroits. Afin de supprimer les espaces blancs autour des noms de sociétés lorsqu'ils sont générés, nous utiliserons input.strip() à la fin.

def extract_company_from_result(soup): 
 companies = []
 for div in soup.find_all(name="div", attrs={"class":"row"}):
   company = div.find_all(name="span", attrs={"class":"company"})
   if len(company) > 0:
    for b in company:
     companies.append(b.text.strip())
   else:
    sec_try = div.find_all(name="span", attrs={"class":"result-link-source"})
    for span in sec_try:
      companies.append(span.text.strip())
 return(companies)
 
extract_company_from_result(soup)
Recherche d'offres d'emploi sur le Web - Obtenir le nom de l'entreprise

Se localiser

Locations are located under the <span> tags. Span tags are sometimes nested within each other, such that the location text may sometimes be within “class”:”location” attributes, or nested in “itemprop”:”addressLocality”. However a simple for loop can examine all span tags for text and retrieve the necessary information.

def extract_location_from_result(soup): 
  locations = []
  spans = soup.findAll('span', attrs={'class': 'location'})
  for span in spans:
    locations.append(span.text)
  return(locations)
extract_location_from_result(soup)
Recherche d'offres d'emploi sur le Web - Obtenir un emplacement

Obtenir un salaire

Le salaire est la partie la plus difficile à extraire des offres d'emploi. La plupart des offres d'emploi ne publient pas du tout d'informations sur le salaire, tandis que pour celles qui le font, il peut y avoir plusieurs endroits où les extraire. Nous devons donc écrire un code qui peut extraire plusieurs salaires à partir de plusieurs endroits, et si aucun salaire n'est trouvé, nous devons créer une valeur "Rien trouvé" pour toutes les offres qui ne contiennent pas de salaire. 

Some salaries are under <nobr> tags, while others are under <div> tags, “class”:”sjcl” and are under separate div tags with no attributes. Try/except statement can be helpful while extracting this information. 

def extract_salary_from_result(soup): 
  salaries = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    try:
      salaries.append(div.find('nobr').text)
    except:
      try:
        div_two = div.find(name="div", attrs={"class":"sjcl"})
        div_three = div_two.find("div")
        salaries.append(div_three.text.strip())
      except:
        salaries.append("Nothing_found")
  return(salaries)
extract_salary_from_result(soup)
Web Scraping pour les offres d'emploi - Obtenir un salaire

Obtenir un résumé du travail

La dernière tâche consiste à obtenir le résumé du poste. Cependant, il n'est pas possible d'obtenir les résumés des postes pour chaque poste particulier car ils ne sont pas inclus dans le HTML d'une page Indeed donnée. Nous pouvons obtenir quelques informations sur chaque poste à partir de ce qui est fourni. Nous pouvons utiliser Selenium à cette fin.

But let’s first try this using python. Summaries are located under <span> tags. Span tags are nested within each other such that the location text is within “class”:” location” tags or nested in “itemprop”:” adressLocality”. However, using a simple for loop can examine all span tags for text to retrieve the necessary information.

Récupération d'offres d'emploi sur le Web - Obtenir un résumé de l'emploi

Questions fréquemment posées

1. Pourquoi est-il nécessaire d'extraire les détails d'un emploi ?

Il existe suffisamment de portails d'emploi qui peuvent vous signaler les emplois correspondant à votre profil. Cependant, une solution de scraping d'offres d'emploi vous permettra d'obtenir une liste complète d'offres d'emploi et leur description dans une base de données pratique. Cela vous permettra d'avoir une meilleure vue de toutes les opportunités d'emploi en un seul endroit. 

2. Comment un proxy peut-il aider à récupérer les détails d'un emploi ? 

Le scraping sur le Web présente généralement certains défis, comme les blocages d'adresses IP, les blocages géographiques et la vitesse limitée. Le scrapping d'emplois à partir de portails d'emploi présente également de tels défis. Pour contourner tous ces problèmes, les adresses proxy peuvent vous aider à obtenir les adresses IP de l'emplacement requis et garantir l'anonymat.

3. Quelles sont les bibliothèques python nécessaires pour récupérer les détails d'un emploi ?

Requests, BeautifulSoup et Pandas sont des bibliothèques python assez courantes pour récupérer des données relatives aux emplois sur des sites Web. La bibliothèque Request est la plus courante des bibliothèques python utilisées pour envoyer des requêtes web, tandis que BeautifulSoup est responsable de l'analyse des données et que la bibliothèque Pandas vous aidera à effectuer les opérations de structure de données. 

Articles connexes

Comment gratter Twitter en utilisant Python

Comment gratter Instagram en utilisant Python

Comment gratter Reddit en utilisant Python

Conclusion

Dans cet article, nous avons vu ce qu'est le web scraping et comment il peut être utile dans notre vie quotidienne en prenant un exemple pratique de scraping de données d'emploi à partir des pages web d'Indeed. Veuillez noter que les résultats que vous obtiendrez pourront être différents de ceux présentés ici, car les pages sont dynamiques et les informations changent en permanence. 

Le Web Scraping est une technique incroyable si elle est effectuée correctement et en fonction de vos besoins. Nous avons également vu les cinq aspects importants de chaque offre d'emploi et comment les extraire. Lorsque vous essayez ce code par vous-même, vous aurez extrait les données des offres d'emploi, et vous n'aurez pas besoin de rechercher les emplois manuellement, ce qui est incroyable. La même technique peut être appliquée à d'autres pages Web, mais leur structure peut être différente. Il faut donc optimiser son code en fonction de celle-ci. Mais toutes les bases sont couvertes dans cet article, de sorte qu'il n'y aura aucune difficulté à gratter d'autres pages également.

Si vous recherchez des services de mandataire, n'oubliez pas de consulter les sites ProxyScrape résidentiel et premium proxys.