Passer au contenu

Comment supprimer Glassdoor

Glassdoor est une excellente ressource pour les demandeurs d'emploi, les employés et les employeurs. Il contient une multitude d'informations sur les entreprises et les emplois, notamment les salaires, les avis, les questions d'entretien, les photos des bureaux, etc. Toutes ces données font de Glassdoor une cible attractive pour le web scraping.

Dans ce guide complet, nous passerons en revue diverses techniques et stratégies pour extraire différents types de données de Glassdoor.

Présentation de l'architecture de Glassdoor

Avant d'entrer dans les détails du scraping, comprenons comment le site Web de Glassdoor est structuré :

  • Rendu côté client – Glassdoor utilise React pour afficher la plupart de son interface utilisateur côté client plutôt que côté serveur. Cela signifie que le HTML initial servi au navigateur est minime et que la plupart du contenu est chargé et rendu avec Javascript.

  • API GraphQL – Les données affichées sur les pages Glassdoor sont récupérées via une API GraphQL. Le site Web envoie des requêtes AJAX à cette API pour obtenir des données structurées qui sont ensuite restituées sur la page.

  • Anti-grattage lourd – Glassdoor utilise diverses mesures anti-scraping telles que la détection des robots, la limitation du débit et le blocage des scrapers.

En résumé, Glassdoor est une application React d'une seule page qui utilise GraphQL pour récupérer des données et dispose de solides défenses anti-grattage. Cette architecture pose des défis uniques aux scrapers que nous devrons surmonter.

Pages de présentation de l'entreprise de grattage

Chaque entreprise sur Glassdoor dispose d'une page de présentation dédiée avec des informations de base telles que le siège social, le secteur, les revenus, etc. Voyons comment récupérer ces détails.

Pour obtenir la page de présentation d'une entreprise, nous avons besoin de son identifiant Glassdoor qui est inclus dans l'URL de la page :

https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.16,22.htm 

Ici EI_IE9079 signifie l'identifiant de l'entreprise de Google. Nous pouvons extraire cet identifiant de n’importe quelle URL d’entreprise pour créer l’URL de la page de présentation.

Supprimer le HTML brut de cette page ne nous donnera pas de données structurées. La clé est d'extraire les données GraphQL de la page qui contient toutes les informations dans un format JSON structuré.

Voici comment extraire les données GraphQL :

import json
import re 

html = # page HTML
match = re.search(r‘window.__ENV__ = (\{.*?\})‘, html)
if match:
    data = json.loads(match.group(1))  

Cela nous donne les données GraphQL complètes pour la page. Nous pouvons maintenant analyser des champs comme description, headquarters, revenue, Etc:

overview = data[‘EmployerPage‘][‘Employer‘]

print(overview[‘description‘]) 
print(overview[‘headquarters‘])
print(overview[‘revenue‘])

Et c'est tout! Avec seulement quelques lignes de code Python, nous pouvons extraire des données structurées pour l'aperçu Glassdoor de n'importe quelle entreprise.

Scraping des offres d'emploi

Glassdoor permet de parcourir les offres d'emploi ouvertes publiées par les entreprises. Ces listes contiennent le titre, l'emplacement, la description et plus encore.

Pour obtenir les emplois d'une entreprise, nous naviguons vers :

https://www.glassdoor.com/Jobs/Google-Jobs-E9079.htm

Les offres d'emploi sont chargées dynamiquement via des appels AJAX lors du défilement vers le bas ou du changement de page. Les données proviennent à nouveau de GraphQL et nous devons les analyser.

Nous faisons d’abord une requête à la page 1 pour obtenir le nombre total de travaux que nous utilisons pour calculer le nombre de pages. Ensuite, nous récupérons chaque page en extrayant les données du travail :

import math
import json 

def get_jobs(companyId):
    url = f‘https://www.glassdoor.com/Jobs/-Jobs-E{companyId}.htm‘

    # request page 1 to get total job count
    page = requests.get(url) 
    total = extract_job_count(page.text) 
    pages = math.ceil(total / 20)

    jobs = []

    # scrape data from each page
    for page in range(1, pages+1):
        page = requests.get(f‘{url}?p={page}‘)
        data = json.loads(extract_graphql(page.text))  
        jobs.extend(data[‘jobs‘])

    return jobs

Cela nous permet de supprimer systématiquement tous les emplois de n’importe quelle entreprise. La clé consiste à calculer les pages en fonction du nombre total de tâches et à paginer via les appels AJAX.

Avis sur les entreprises de scraping

Les avis sont sans doute les données les plus précieuses sur Glassdoor. Discutons de la façon de supprimer tous les avis d'une entreprise.

Semblable aux emplois, nous accédons à la page des avis sur l’entreprise :

https://www.glassdoor.com/Reviews/Google-Reviews-E9079.htm

Nous devons comprendre comment les avis sont paginés. Glassdoor affiche un nombre fixe d'avis par page et nous devons gratter toutes les pages pour obtenir des données complètes.

Le nombre de pages de révision peut être calculé à l'avance en extrayant un numberOfPages champ à partir des données GraphQL. Ensuite, nous paginons sur chaque page et collectons des avis :

import math
import json

def get_reviews(companyId):
    url = f‘https://www.glassdoor.com/Reviews/-Reviews-E{companyId}.htm‘ 

    # extract number of pages from initial request
    page = requests.get(url)
    data = json.loads(extract_graphql(page.text))
    pages = data[‘numberOfPages‘]

    reviews = []

    for page in range(1, pages+1):
        page = requests.get(f‘{url}?p={page}‘) 
        data = json.loads(extract_graphql(page.text))

        # extract reviews
        reviews.extend(data[‘reviews‘]) 

    return reviews

Ici, nous extrayons le nombre de pages d'avis à l'avance, puis nous parcourons chaque page pour créer l'ensemble complet des avis.

Cette technique peut récupérer tous les avis de n'importe quelle entreprise sur Glassdoor !

Salaires d'un Scraping

En plus des avis, les données salariales sont également très utiles. Glassdoor dispose d'une section consacrée aux salaires pour chaque entreprise. Regardons la suppression des relevés de salaires.

Nous commençons par l'URL de la page des salaires :

https://www.glassdoor.com/Salary/Google-Salaries-E9079.htm 

Notre approche générale impliquera encore une fois :

  1. Calcul du nombre de pages à partir du salaire total
  2. Pagination à travers chaque page en grattant les relevés de salaire

Voici une implémentation :

import math
import json

def get_salaries(companyId):
    url = f‘https://www.glassdoor.com/Salary/-Salaries-E{companyId}.htm‘

    # extract page count
    page = requests.get(url)
    data = json.loads(extract_graphql(page.text)) 
    pages = data[‘numPages‘]

    salaries = []

    for page in range(1, pages+1):
        page = requests.get(f‘{url}?p={page}‘)
        data = json.loads(extract_graphql(page.text))

        # extract salary records 
        salaries.extend(data[‘salaries‘])

    return salaries

Cela nous permet de récupérer systématiquement tous les salaires d’une entreprise sur plusieurs pages.

Questions d'entretien de grattage

Les informations sur les entretiens sont une autre excellente ressource de données sur Glassdoor. Voyons comment supprimer toutes les questions d'entretien publiées pour une entreprise.

La page d'entretien de l'entreprise se trouve à l'adresse :

https://www.glassdoor.com/Interview/Google-Interview-Questions-E9079.htm

Les questions d'entretien sont chargées dynamiquement via des requêtes AJAX lors du défilement vers le bas ou du changement de page.

Notre plan de match est familier :

  1. Calculer le nombre de pages à partir du nombre total de questions
  2. Extraire les questions de chaque page

Voici une implémentation :

import math
import json

def get_questions(companyId):
    url = f‘https://www.glassdoor.com/Interview/-Interview-Questions-E{companyId}.htm‘

    # get total question count
    page = requests.get(url)
    data = json.loads(extract_graphql(page.text))
    total = data[‘interviewQuestionCount‘]
    pages = math.ceil(total / 20)

    questions = []

    for page in range(1, pages+1):
        page = requests.get(f‘{url}?p={page}‘)
        data = json.loads(extract_graphql(page.text))

        # extract questions
        questions.extend(data[‘interviewQuestions‘])

    return questions

Donc, en résumé, nous calculons le nombre total de pages en fonction du nombre de questions, paginons les appels AJAX et extrayons les questions, ce qui nous permet d'obtenir toutes les informations sur les entretiens d'une entreprise.

Photos des bureaux de Scraping

Pour compléter notre extraction de données Glassdoor, récupérons également les photos des bureaux de l'entreprise qui fournissent un aperçu visuel soigné.

La page photos d'une entreprise est accessible à l'adresse suivante :

https://www.glassdoor.com/Photos/Google-Office-Photos-E9079.htm

Notre stratégie de pagination standard s'applique : calculez les pages à partir du nombre total de photos, paginez via les appels AJAX, extrayez les photos :

import math 
import json

def get_photos(companyId):
    url = f‘https://www.glassdoor.com/Photos/-Office-Photos-E{companyId}.htm‘

    # get total photo count 
    page = requests.get(url)
    data = json.loads(extract_graphql(page.text))
    total = data[‘officePhotoCount‘]
    pages = math.ceil(total / 20)

    photos = []

    for page in range(1, pages+1):
        page = requests.get(f‘{url}?p={page}‘)
        data = json.loads(extract_graphql(page.text))

        # extract photos
        photos.extend(data[‘officePhotos‘])

    return photos

Et avec cela, nous pouvons récupérer toutes les photos de bureau disponibles pour une entreprise !

Faire face à l’anti-grattage

Bien que les techniques décrites permettent d'extraire divers points de données de Glassdoor, les scrapers à grande échelle sont généralement bloqués.

Glassdoor dispose d'une gamme de mécanismes anti-scraping pour empêcher l'extraction exhaustive des données, notamment :

  • Blocage d'IP
  • Empreintes digitales du navigateur
  • Systèmes de détection de robots
  • Limitation du débit

Voici quelques conseils pour éviter les blocages lors du scraping de Glassdoor :

  • Utiliser des procurations : Faites pivoter différents proxys résidentiels pour chaque demande afin que votre scraper apparaisse comme des utilisateurs différents.

  • Taux limite : Assurez-vous d'avoir des délais entre les demandes et grattez à un rythme modeste.

  • Mimer le navigateur : définissez un agent utilisateur valide, acceptez les en-têtes et Javascript activé pour apparaître comme un vrai navigateur.

  • Blocs de surveillance: Vérifiez si votre adresse IP ou vos proxys sont bloqués et changez de centre de données ou de fournisseur en conséquence.

  • Utiliser les services de scraping : exploitez les API de scraping telles que ScraperAPI et Octoparse, qui disposent d'un support intégré pour contourner les mécanismes anti-scraping.

Avec les bonnes précautions, il est possible d'extraire des données de Glassdoor à grande échelle sans être bloqué.

Scraper Glassdoor avec ScraperAPI

ScraperAPI est une API de scraping payante qui gère tous les défis anti-scraping et permet d'extraire des données à grande échelle.

Il prend en charge l'exploration ajax, les proxys et s'intègre directement aux bibliothèques populaires telles que Python Requests.

Voici comment nous récupérerions les avis des entreprises à l'aide de ScraperAPI :

import requests
import math
import json

API_KEY = ‘XXX‘ # assign key

def get_reviews(companyId):

    url = f‘https://www.glassdoor.com/Reviews/-Reviews-E{companyId}.htm‘

    # initial request to get page count
    response = requests.get(url, 
        headers={‘apikey‘: API_KEY})

    pages = extract_page_count(response.text)

    reviews = []

    for page in range(1, pages+1):
        response = requests.get(f‘{url}?p={page}‘,
            headers={‘apikey‘: API_KEY})

        data = json.loads(response.text)    
        reviews.extend(data[‘reviews‘])

    return reviews 

Ici, ScraperAPI gère les proxys, les navigateurs et d'autres aspects nous permettant de nous concentrer sur l'extraction de données.

Il s'agit d'un moyen simple de créer des scrapers Glassdoor évolutifs sans avoir à vous soucier des systèmes anti-scraping.

Lorsque vous créez des scrapers Glassdoor, il est important de vous assurer que votre travail est conforme à la loi. Voici quelques aspects clés à considérer :

  • Conditions d'utilisation – Étudiez les conditions de service de Glassdoor pour comprendre les autorisations et les restrictions relatives à l'utilisation de ses données. De manière générale, le grattage périodique de volumes raisonnables à des fins non commerciales est autorisé.

  • Les données Personnelles – Évitez de supprimer les données personnelles des utilisateurs de Glassdoor, telles que les noms, les identifiants de messagerie, etc., ce qui soulève des problèmes de confidentialité.

  • Droits d'auteur – Les avis Glassdoor et autres données soumises par les utilisateurs sont couverts par le droit d’auteur. Ne reproduisez pas en masse le contenu textuel du site.

  • Limites de taux – Respectez les limites de débit imposées par Glassdoor et ne surchargez pas leurs serveurs avec un nombre excessif de requêtes.

  • Cas d'usage – N'utilisez pas les données Glassdoor à des fins contraires à l'éthique, comme le harcèlement des employés, la discrimination, etc.

Le respect de ces principes contribuera à garantir que votre grattoir reste du bon côté de la loi.

Conclusion

Dans ce guide, nous avons exploré diverses stratégies et techniques pour extraire les données d'entreprise de Glassdoor à l'aide de Python, notamment :

  • Extraire des informations générales, des offres d'emploi, des salaires, des avis, des questions d'entretien et des photos en analysant les données de l'API GraphQL
  • Calculer les pages de pagination à partir du nombre total et gratter systématiquement toutes les pages
  • Gérer les systèmes anti-scraping de Glassdoor avec des proxys et des services comme ScraperAPI
  • Assurer la conformité légale en respectant les conditions de service, la confidentialité, les droits d'auteur et les limites de débit

Les méthodes discutées peuvent être adaptées pour créer de puissants scrapers Glassdoor qui collectent des données utiles à grande échelle de manière robuste et éthique.

Bon grattage !

Mots clés:

Prendre part à la conversation

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