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.
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
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.
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()
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)
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)
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 :
Lors du scraping de Glassdoor ou de tout autre site web, il est essentiel de suivre des pratiques de scraping responsables :
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.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0