Glassdoor è una delle migliori piattaforme che fornisce un'ampia gamma di informazioni sia per chi cerca lavoro sia per chi vuole assumerlo, tra cui informazioni sugli stipendi, recensioni dei datori di lavoro e domande di lavoro. In questa guida illustreremo il processo di scraping degli annunci di lavoro da Glassdoor utilizzando Python e Playwright. Playwright è essenziale in questo caso perché Glassdoor impiega forti misure anti-bot, che possono segnalare e bloccare le librerie di scraping tradizionali. Con Playwright, possiamo simulare un browser reale e includere dei proxy, aiutandoci a bypassare questi sistemi di rilevamento.
A causa dei solidi meccanismi antiscraping di Glassdoor, le richieste dirette con librerie come le richieste possono portare al blocco dell'IP o a problemi di CAPTCHA. Playwright ci permette di automatizzare un browser, rendendo le nostre interazioni più simili a quelle umane. Aggiungendo proxy e intestazioni del browser, possiamo evitare ulteriormente il rilevamento.
Per iniziare, è necessario installare Playwright e la libreria lxml per l'analisi dell'HTML. È possibile installarle come segue:
pip install playwright lxml
playwright install
Passeremo in rassegna ogni fase, dal caricamento della pagina con Playwright all'estrazione dei dettagli del lavoro e al salvataggio dei dati in un file CSV.
Per prima cosa, configurare Playwright con un proxy per connettersi a Glassdoor. Questo aiuta a prevenire il blocco e consente al browser di caricare la pagina come se un utente reale stesse visitando il sito.
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
# Chiamare la funzione per recuperare il contenuto della pagina
html_content = await scrape_job_listings()
Dopo aver caricato la pagina, usare lxml per analizzare il contenuto HTML ed estrarre le informazioni rilevanti sul lavoro. Ecco come analizzare il titolo del lavoro, la posizione, lo stipendio e altri dettagli per ogni annuncio di lavoro:
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)
Una volta estratti i dettagli del lavoro, possiamo salvarli in un file CSV per facilitare l'analisi dei dati.
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():
# Impostazione del browser Playwright con proxy per evitare il rilevamento
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)
# Recuperare il contenuto della pagina e chiudere il browser
content = await page.content()
await browser.close()
# Analizzare il contenuto con lxml
parser = fromstring(content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
# Estrarre i dati per ogni annuncio di lavoro
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)
# Salvare i dati in un file 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)
# Eseguire la funzione di scraping
import asyncio
asyncio.run(scrape_job_listings())
Spiegazione del codice completo:
Quando si effettua lo scraping di Glassdoor o di qualsiasi altro sito web, è essenziale seguire pratiche di scraping responsabili:
Quando saprete come raschiare i dati di Glassdoor utilizzando Python e Playwright, migliorerete facilmente la vostra capacità di raccogliere annunci di lavoro. Questa tecnica, se combinata con l'uso di proxy e intestazioni appropriate, è efficace per eliminare il rischio di essere bloccati da Glassdoor. È inoltre necessario prendere nota delle politiche di scraping etico per evitare di mandare in tilt i server di Glassdoor. Rispettando queste misure, ora potete raccogliere ed elaborare informazioni utili sull'occupazione da Glassdoor per il vostro uso personale o per quello della vostra azienda.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0