Wie man Glassdoor-Daten mit Python abgreift

Bemerkungen: 0

Glassdoor ist eine der besten Plattformen, die eine Vielzahl von Informationen für Arbeitssuchende und Einstellungswillige bereitstellt, darunter Gehaltsinformationen, Arbeitgeberbewertungen und Stellengesuche. In dieser Anleitung gehen wir durch den Prozess des Scrapens von Stellenangeboten von Glassdoor mit Python und Playwright. Playwright ist hier unerlässlich, da Glassdoor strenge Anti-Bot-Maßnahmen einsetzt, die herkömmliche Scraping-Bibliotheken kennzeichnen und blockieren können. Mit Playwright können wir einen echten Browser simulieren und Proxys einbinden, wodurch wir diese Erkennungssysteme umgehen können.

Aufgrund der robusten Anti-Scraping-Mechanismen von Glassdoor können direkte Anfragen mit Bibliotheken wie Requests zu IP-Blockierungen oder CAPTCHA-Herausforderungen führen. Playwright ermöglicht es uns, einen Browser zu automatisieren und unsere Interaktionen menschenähnlicher zu gestalten. Durch das Hinzufügen von Proxys und Browser-Headern können wir die Erkennung weiter vermeiden.

Anforderungen

Um loszulegen, müssen Sie Playwright und die lxml-Bibliothek für das HTML-Parsing installieren. Sie können sie wie folgt installieren:


pip install playwright lxml
playwright install

Auslesen von Glassdoor-Stellenangeboten

Wir gehen die einzelnen Schritte durch, vom Laden der Seite mit Playwright bis zum Extrahieren der Jobdetails und Speichern der Daten in einer CSV-Datei.

Schritt 1. Einrichten des Browsers und Erstellen von Anfragen

Richten Sie zunächst Playwright mit einem Proxy ein, um eine Verbindung zu Glassdoor herzustellen. Dies verhindert, dass die Seite blockiert wird, und ermöglicht es dem Browser, die Seite so zu laden, als ob ein echter Benutzer die Website besuchen würde.


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

# Aufruf der Funktion zum Abrufen des Seiteninhalts
html_content = await scrape_job_listings()

Schritt 2. Parsen des HTML und Extrahieren der Daten

Nachdem Sie die Seite geladen haben, verwenden Sie lxml, um den HTML-Inhalt zu analysieren und die relevanten Stelleninformationen zu extrahieren. Im Folgenden erfahren Sie, wie Sie den Jobtitel, den Standort, das Gehalt und andere Details für jedes Stellenangebot auslesen:


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)

Schritt 3. Speichern der Daten in einer CSV-Datei

Sobald wir die Auftragsdetails extrahiert haben, können wir sie zur einfachen Datenanalyse in einer CSV-Datei speichern.


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)

Kompletter Code


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

async def scrape_job_listings():
    # Playwright-Browser mit Proxy einrichten, um Erkennung zu vermeiden
    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)
        
        # Abrufen des Seiteninhalts und Schließen des Browsers
        content = await page.content()
        await browser.close()
        
        # Parsen des Inhalts mit lxml
        parser = fromstring(content)
        job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
        
        # Daten für jedes Stellenangebot extrahieren
        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)
    
        # Speichern der Daten in einer CSV-Datei
        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)

# Ausführen der Scraping-Funktion
import asyncio
asyncio.run(scrape_job_listings())

Erläuterung des vollständigen Kodex:

  1. Browser-Setup mit Proxy: Der Code initiiert eine Browsersitzung mit Playwright und bindet einen Proxy ein, um das menschliche Surfverhalten zu imitieren. Die Einstellung headless=False ermöglicht es, das Browserfenster geöffnet zu lassen, wodurch die Bot-Erkennung umgangen werden kann.
  2. Navigieren zur Seite mit den Stellenangeboten: Das Skript besucht die Glassdoor-URL mit Stellenangeboten für Software-Engineering-Jobs in den Vereinigten Staaten.
  3. Parsing des Inhalts: Die Jobdaten werden mithilfe von lxml für das HTML-Parsing extrahiert. Wir erfassen den Jobtitel, den Standort, das Gehalt, den Job-Link, den Firmennamen und ob es sich um einen Job handelt, für den man sich einfach bewerben kann.
  4. Speichern in CSV: Nachdem alle Daten extrahiert wurden, speichert das Skript sie in einer CSV-Datei, glassdoor_job_listings.csv, mit Spalten für jedes Attribut.

Respektieren Sie die Nutzungsbedingungen von Glassdoor

Beim Scraping von Glassdoor oder einer anderen Website ist es wichtig, verantwortungsvolle Scraping-Praktiken zu befolgen:

  • Ratenbegrenzungen einhalten: Vermeiden Sie eine Überlastung des Servers, indem Sie Verzögerungen zwischen den Anfragen einbauen.
  • Verwenden Sie rotierende Proxys: Minimieren Sie das Risiko, gesperrt zu werden, indem Sie Proxys und IPs wechseln.
  • Befolgen Sie die Nutzungsbedingungen: Überprüfen Sie regelmäßig die Nutzungsbedingungen der Website und vermeiden Sie Handlungen, die gegen sie verstoßen.

Wenn Sie wissen, wie Sie die Daten von Glassdoor mithilfe von Python und Playwright auslesen können, werden Sie Ihre Möglichkeiten zum Sammeln von Stellenangeboten leicht verbessern. In Kombination mit der Verwendung von Proxys und geeigneten Headern ist diese Technik ein wirksames Mittel, um das Risiko, von Glassdoor blockiert zu werden, zu beseitigen. Sie müssen auch die ethischen Richtlinien für das Scraping beachten, um zu verhindern, dass die Server von Glassdoor abstürzen. Wenn Sie sich an diese Maßnahmen halten, können Sie jetzt nützliche Beschäftigungsinformationen von Glassdoor für Ihren eigenen Gebrauch oder den Ihres Unternehmens sammeln und verarbeiten.

Bemerkungen:

0 Bemerkungen