Comment récupérer les données de Glassdoor en utilisant Python

Commentaires: 0

Glassdoor est l'une des meilleures plateformes qui fournit un large éventail d'informations aux personnes à la fois à la recherche d'un emploi et souhaitant les embaucher, notamment des informations sur les salaires, des avis d'employeurs et des demandes d'emploi. Dans ce guide, nous allons parcourir le processus de récupération des listes d'emploi de Glassdoor à l'aide de Python et de Playwright. Playwright est essentiel ici parce que Glassdoor utilise de solides mesures anti-bots, qui peuvent signaler et bloquer les bibliothèques de scraping traditionnelles. Avec Playwright, nous pouvons simuler un véritable navigateur et inclure des proxies, ce qui nous permet de contourner ces systèmes de détection.

En raison des mécanismes anti-scraping robustes de Glassdoor, les demandes directes avec des bibliothèques telles que les requêtes peuvent entraîner un blocage IP ou des défis CAPTCHA. Playwright nous permet d'automatiser un navigateur, rendant nos interactions plus humaines. En ajoutant des proxies et des en-têtes de navigateur, nous pouvons encore mieux éviter la détection.

Exigences

Pour commencer, vous devez installer Playwright et la bibliothèque lxml pour l'analyse HTML. Vous pouvez les installer comme suit :


pip install playwright lxml
playwright install

Récupération des listes d'emploi de Glassdoor

Nous allons passer en revue chaque étape, du chargement de la page avec Playwright à l'extraction des détails de l'emploi et à l'enregistrement des données dans un fichier CSV.

Étape 1. Configurer le navigateur et faire des requêtes

Tout d'abord, configurez Playwright avec un proxy pour vous connecter à Glassdoor. Cela permet d'éviter d'être bloqué et permet au navigateur de charger la page comme si un utilisateur réel visitait le site.


from playwright.async_api import async_playwright
from lxml.html import fromstring

async def scrape_job_listings():
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False,
            proxy={"server": '', 'username': '', 'password': ''}
        )
        page = await browser.new_page()
        await page.goto('https link', timeout=60000)
        content = await page.content()
        await browser.close()
        return content

# Appeler la fonction pour récupérer le contenu de la page
html_content = await scrape_job_listings()

Étape 2. Analyse du code HTML et extraction des données

Après avoir chargé la page, utilisez lxml pour analyser le contenu HTML et extraire les informations pertinentes sur l'emploi. Voici comment analyser l'intitulé du poste, le lieu, le salaire et d'autres détails pour chaque offre d'emploi :


parser = fromstring(html_content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')

jobs_data = []
for element in job_posting_elements:
    job_title = element.xpath('.//a[@data-test="job-title"]/text()')[0]
    job_location = element.xpath('.//div[@data-test="emp-location"]/text()')[0]
    salary = ' '.join(element.xpath('.//div[@data-test="detailSalary"]/text()')).strip()
    job_link = element.xpath('.//a[@data-test="job-title"]/@href')[0]
    easy_apply = bool(element.xpath('.//div[@data-role-variant="featured"]'))
    company = element.xpath('.//span[@class="EmployerProfile_compactEmployerName__LE242"]/text()')[0]
    
    job_data = {
        'company': company,
        'job_title': job_title,
        'job_location': job_location,
        'job_link': job_link,
        'salary': salary,
        'easy_apply': easy_apply
    }
    jobs_data.append(job_data)

Etape 3. Enregistrement des données dans un fichier CSV

Une fois que nous avons extrait les détails de l'emploi, nous pouvons les enregistrer dans un fichier CSV pour faciliter l'analyse des données.


import csv

with open('glassdoor_job_listings.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=['company', 'job_title', 'job_location', 'job_link', 'salary', 'easy_apply'])
    writer.writeheader()
    writer.writerows(jobs_data)

Code complet


import csv
from playwright.async_api import async_playwright
from lxml.html import fromstring

async def scrape_job_listings():
    # Configurer le navigateur Playwright avec un proxy pour éviter la détection
    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False,
            proxy={"server": '', 'username': '', 'password': ''}
        )
        page = await browser.new_page()
        await page.goto('https://www.glassdoor.com/Job/united-states-software-engineer-jobs-SRCH_IL.0,13_IN1_KO14,31.htm', timeout=60000)
        
        # Récupérer le contenu de la page et fermer le navigateur
        content = await page.content()
        await browser.close()
        
        # Analyser le contenu avec lxml
        parser = fromstring(content)
        job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
        
        # Extraire des données pour chaque offre d'emploi
        jobs_data = []
        for element in job_posting_elements:
            job_title = element.xpath('.//a[@data-test="job-title"]/text()')[0]
            job_location = element.xpath('.//div[@data-test="emp-location"]/text()')[0]
            salary = ' '.join(element.xpath('.//div[@data-test="detailSalary"]/text()')).strip()
            job_link = "https://www.glassdoor.com" + element.xpath('.//a[@data-test="job-title"]/@href')[0]
            easy_apply = bool(element.xpath('.//div[@data-role-variant="featured"]'))
            company = element.xpath('.//span[@class="EmployerProfile_compactEmployerName__LE242"]/text()')[0]
            
            job_data = {
                'company': company,
                'job_title': job_title,
                'job_location': job_location,
                'job_link': job_link,
                'salary': salary,
                'easy_apply': easy_apply
            }
            jobs_data.append(job_data)
    
        # Enregistrer les données dans un fichier CSV
        with open('glassdoor_job_listings.csv', 'w', newline='', encoding='utf-8') as file:
            writer = csv.DictWriter(file, fieldnames=['company', 'job_title', 'job_location', 'job_link', 'salary', 'easy_apply'])
            writer.writeheader()
            writer.writerows(jobs_data)

# Exécuter la fonction de raclage
import asyncio
asyncio.run(scrape_job_listings())

Explication du code complet :

  1. Configuration du navigateur avec proxy : Le code initie une session de navigateur avec Playwright, en incorporant un proxy pour imiter le comportement de navigation humain. Le paramètre headless=False permet à la fenêtre du navigateur de rester ouverte, ce qui peut aider à contourner la détection des robots.
  2. Navigation vers la page des offres d'emploi : Le script visite l'URL des offres d'emploi de Glassdoor pour les emplois en ingénierie logicielle aux États-Unis.
  3. Analyse du contenu : Les données relatives à l'emploi sont extraites à l'aide de lxml pour l'analyse HTML. Nous capturons le titre de l'emploi, le lieu, le salaire, le lien vers l'emploi, le nom de l'entreprise et s'il s'agit d'un emploi à candidature facile.
  4. Enregistrement dans un fichier CSV : après avoir extrait toutes les données, le script les enregistre dans un fichier CSV, glassdoor_job_listings.csv, avec des colonnes pour chaque attribut.

Respecter les conditions d'utilisation de Glassdoor

Lors du scraping de Glassdoor ou de tout autre site web, il est essentiel de suivre des pratiques de scraping responsables :

  • Respecter les limites de débit : Évitez de submerger le serveur en espaçant les demandes.
  • Utiliser des serveurs mandataires tournants : Réduisez le risque d'être banni en faisant tourner les proxys et les IP.
  • Respecter les conditions d'utilisation : Consultez régulièrement les conditions d'utilisation du site web et évitez les actions qui les enfreignent.

Lorsque vous savez comment récupérer les données de Glassdoor à l'aide de Python et de Playwright, vous améliorez facilement votre capacité à collecter des offres d'emploi. Cette technique, combinée à l'utilisation de proxies et d'en-têtes appropriés, est efficace pour éliminer le risque d'être bloqué par Glassdoor. Vous devez également prendre note des politiques de scraping éthiques pour éviter de planter les serveurs de Glassdoor. En respectant ces mesures, vous pouvez désormais récolter et traiter des informations utiles sur l'emploi provenant de Glassdoor pour votre propre usage ou celui de votre entreprise.

Commentaires:

0 Commentaires