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.
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".
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 :
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.
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.
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.
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,
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.
Cinq points essentiels pour chaque offre d'emploi,
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é.
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,
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,
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)
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)
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)
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.
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.
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.
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
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.