Zum Inhalt

Ihre Schritt-für-Schritt-Anleitung zum Scrapen von Daten aus Indeed

Hallo! Möchten Sie Stellenangebote von Indeed löschen? Hier sind Sie richtig.

Indeed ist eine der größten Jobsuchmaschinen im Internet mit über 250 Millionen einzigartige Besucher pro Monat. Das ist ein riesiger Datenschatz zu Stellenausschreibungen, Gehältern, Unternehmensprofilen und mehr.

Leider stellen die APIs von Indeed nicht alle diese Daten vollständig zur Verfügung. Hier kommt Web Scraping ins Spiel.

In dieser Anleitung erkläre ich Ihnen Schritt für Schritt, wie Sie Indeed mit Python durchsuchen. Ich zeige Codeausschnitte, die Sie verwenden können, zusammen mit Tipps zum präzisen Scrapen und Vermeiden von Blockierungen.

Außerdem werde ich erläutern, wie man das Scraping so automatisiert, dass es täglich, wöchentlich oder monatlich ausgeführt wird. Auf diese Weise können Sie die Daten Ihrer Stellenanzeigen automatisch auf dem neuesten Stand halten!

Am Ende werden Sie Indeed-Stellenausschreibungen wie ein Profi durchsuchen. Lasst uns eintauchen!

Warum Indeed-Stellenangebote streichen?

Bevor wir uns mit etwas Python-Code die Hände schmutzig machen, reden wir darüber warum Möglicherweise möchten Sie zunächst Daten aus Indeed extrahieren.

Hier nur ein paar Ideen:

  • Marktforschung – Analysieren Sie Trends bei Stellenausschreibungen, um steigende Nachfrage nach Fähigkeiten oder Rollen zu ermitteln. Indeed verfügt über Daten dazu Millionen von offenen Stellen in allen Branchen.

  • Wettbewerbsintelligenz – Sehen Sie, welche Gehälter und Zusatzleistungen Unternehmen für ähnliche Positionen anbieten. Nützlich beim Benchmarking Ihrer eigenen Vergütungspakete.

  • Jobsuchmaschinen – Erstellen Sie benutzerdefinierte Jobbörsen mit Indeed-Daten, die nach bestimmten Schlüsselwörtern oder Standorten gefiltert sind.

  • Rekrutierungstools – Verfolgen Sie neue Stellenangebote, indem Sie die Fähigkeiten der Kandidaten auf relevante Stellen abstimmen.

  • Lebenslaufanalyse – Extrahieren Sie Schlüsselwörter und Fähigkeiten aus Stellenbeschreibungen, um Vorschläge zur Verbesserung von Lebensläufen und Anschreiben bereitzustellen.

Das sind nur einige Beispiele – mit umfangreichen strukturierten Daten zu Stellenausschreibungen sind die Möglichkeiten endlos!

Schauen wir uns nun an, wie man diese Daten mithilfe von Web Scraping tatsächlich extrahiert.

Bevor ich mich mit der Codierung befasse, möchte ich kurz auf die Rechtmäßigkeit von Web Scraping eingehen. Ich weiß, dass einige Leute hier Bedenken haben.

Die kurze Antwort lautet: Das Scrapen öffentlicher Daten von Indeed ist vollkommen legal In den meisten Fällen, solange Sie einige Grundregeln befolgen:

  • Greifen Sie nur auf öffentliche Seiten zu – versuchen Sie nicht, private Benutzerdaten oder Logins abzugreifen.

  • Überlasten Sie die Server von Indeed nicht durch zu aggressives Scraping. Befolgen Sie höfliche Crawling-Praktiken.

  • Halten Sie sich an die Nutzungsbedingungen von Indeed. Sie verbieten Web Scraping nicht ausdrücklich.

  • Vermeiden Sie es, große Textauszüge wörtlich zu kopieren, um das Urheberrecht zu respektieren. Paraphrasieren ist in Ordnung.

  • Veröffentlichen Sie keine privaten, persönlichen oder sensiblen Daten erneut.

Wenn Sie diese gesunden Menschenverstandsrichtlinien befolgen, ist das Web-Scraping von Indeed für öffentliche Stellenausschreibungsdaten in den meisten Ländern gesetzlich zulässig.

Natürlich empfehle ich Ihnen dennoch, einen Anwalt zu konsultieren, wenn Sie Bedenken haben, da die Gesetze unterschiedlich sind. Aber Sie können Indeed mit Zuversicht durchsuchen, solange Sie ethisch bleiben!

Ok, lasst uns in die lustigen Dinge eintauchen – den eigentlichen Code!

Indeed-Einträge mit Python durchsuchen

Beim Scraping großer Websites wie Indeed ist Python dank Bibliotheken wie … eine gute Wahl Anfragen, Schöne Suppe und Selenium.

Ich werde Sie durch ein Skript führen, um:

  • Extrahieren Sie Stellenangebote, die mit Stichwort- und Standortsuchen übereinstimmen

  • Analysieren Sie Details wie Berufsbezeichnungen, Gehälter und Beschreibungen

  • Automatisieren Sie die Paginierung, um alle Einträge über mehrere Seiten hinweg abzurufen

Lass uns anfangen!

Bibliotheken importieren

Wir werden verwenden Anfragen Seiten abrufen, Schöne Suppe zum Parsen, Uhrzeit drosseln, und Pandas Daten speichern:

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd

Anfragen und BeautifulSoup sind alles Sie wirklich brauchen. Aber Pandas hilft bei der Datenverwaltung, während Time Anfragen drosselt.

Suchparameter definieren

Definieren wir zunächst, welche Stellenangebote wir haben möchten. Geben Sie Schlüsselwörter, Standort und andere Filter an:

keywords = "Remote Software Engineer"
location = "United States" 
salary_min = 100000

Dabei geht es um hochbezahlte Remote-Software-Jobs in den USA. Passen Sie es an Ihre gewünschten Kriterien an.

Suchergebnisseite abrufen

Wenn die Parameter festgelegt sind, fordern wir die URL an und übergeben unsere Schlüsselwörter und den Standort:

BASE_URL = "https://www.indeed.com/jobs?" 

params = {
  ‘q‘: keywords,
  ‘l‘: location,
  ‘minSalary‘: salary_min,
  ‘remotejob‘: ‘remote‘ # Filter remote jobs  
}

print(f‘Fetching job listings for {keywords} in {location}...‘)

res = requests.get(BASE_URL, params=params)
res.raise_for_status() # Raise exception for 4xx/5xx

Dadurch wird die erste Suchanfrage durchgeführt und nach unseren Schlüsselwörtern und Parametern gefiltert.

Analysieren Sie Ergebnisse mit BeautifulSoup

Als Nächstes analysieren wir den HTML-Code der Suchergebnisseite, um allgemeine Eintragsdaten zu extrahieren:

soup = BeautifulSoup(res.text, ‘html.parser‘)

listings = [] # List to store listings

for div in soup.find_all(‘div‘, class_=‘job_seen_beacon‘):

  title = div.find(‘h2‘).text.strip()

  company = div.find(‘span‘, class_=‘companyName‘).text.strip()

  location = div.find(‘div‘, class_=‘companyLocation‘).text.strip()

  # Append listing data    
  listings.append({
    ‘title‘: title,
    ‘company‘: company, 
    ‘location‘: location
  })

Hier finden wir jeden Eintrag div, schnappen Sie sich die Schlüsselfelder wie Titel und Firma und speichern Sie sie in unserem listings Liste.

Behandeln Sie die Paginierung

Indeed teilt die Ergebnisse auf mehrere Seiten auf. Wir müssen jedes durchgehen:

# Track page number 
current_page = 0

while True:

  # Increment page
  current_page += 1 

  print(f‘Scraping page {current_page}...‘)

  # Build URL for next page
  next_page_url = BASE_URL + f‘&start={current_page*10}‘  

  # Fetch page HTML
  res = requests.get(next_page_url, params=params)

  # Parse HTML
  soup = BeautifulSoup(res.text, ‘html.parser‘)   

  # Return if last page
  if not soup.find(‘a‘, {‘aria-label‘: ‘Next‘}):
    print(‘Reached last page!‘)
    break

  # Extract listings
  for div in soup.find_all(...):
    # Extract listing data

  # Sleep to throttle requests  
  time.sleep(3) 

print(f‘Scraped {len(listings)} listings‘)

Hier erhöhen wir kontinuierlich die Seitenzahl, rufen die nächste Seite ab, extrahieren Auflistungen und durchlaufen eine Schleife, bis wir die letzte Seite erreichen.

Einen Kurzfilm hinzufügen time.sleep() Die Drosselung trägt dazu bei, eine Überlastung der Indeed-Server zu vermeiden.

Details zur Scrape-Auflistung

Bisher haben wir hochrangige Daten wie Titel und Unternehmen extrahiert. Um Details wie Gehälter und Beschreibungen zu erhalten, scannen wir jede Eintrags-URL:

from selenium import webdriver

driver = webdriver.Chrome()

# Loop through listings
for listing in listings:

  print(f‘Getting details for {listing["title"]}‘)

  # Load listing URL
  url = listing[‘url‘]  
  driver.get(url)

  # Extract key fields
  desc = driver.find_element_by_id(‘jobDescriptionText‘).text
  salary = driver.find_element_by_class_name(‘salary-snippet‘).text

  listing[‘desc‘] = desc
  listing[‘salary‘] = salary

  # Sleep to throttle
  time.sleep(2)

driver.quit()  

Hier bietet Selenium einen vollständigen Browser zum Rendern von JavaScript-lastigen Seiten. Wir laden jede URL und extrahieren zusätzliche Felder wie die Beschreibung und das Gehalt.

Pro Tip: Erwägen Sie die Verwendung von a Proxy-Service um IP-Blockaden zu vermeiden, wenn Selenium in großem Umfang verwendet wird.

Und das ist es! Mit diesen Schritten können Sie Tausende von Stellenangeboten automatisch aus Indeed entfernen.

Das Endergebnis sind strukturierte Auftragsdaten, die Sie analysieren oder in Tools wie Excel exportieren können. Schauen wir uns als nächstes einige Beispiele an.

Was können Sie mit gecrackten Indeed-Daten tun?

Was können wir nun eigentlich mit diesen Daten machen, da wir Indeed-Einträge durchsuchen können?

Hier nur ein paar Ideen:

Zur Analyse nach Excel exportieren

df = pandas.DataFrame(listings)
df.to_excel(‘indeed_listings.xlsx‘, index=False)

Pandas erleichtert den Export von Ergebnissen nach Excel. Dies ermöglicht leistungsstarke Filterung, Pivot-Tabellen und Formeln.

Indeed-Daten in Excel

Sie können Trends über Standorte, Gehälter, Fähigkeiten und mehr hinweg analysieren.

Erstellen Sie Datenbanken für die Jobsuche

import sqlite3

# Connect to SQLite database
conn = sqlite3.connect(‘jobs.db‘)

# Create table
conn.execute(‘‘‘
  CREATE TABLE jobs (
    title TEXT,
    company TEXT, 
    description TEXT,
    salary REAL  
  );
‘‘‘)

# Insert listings into database
for listing in listings:
  conn.execute("""
    INSERT INTO jobs VALUES (
      ?, ?, ?, ?
    )""", (listing[‘title‘], listing[‘company‘], 
            listing[‘desc‘], listing[‘salary‘]))

conn.commit()
conn.close()

SQLite bietet eine einfache Datenbank zum Speichern von Einträgen für eine individuelle Suche. Integrieren Sie Flask, um Ihre eigene Jobbörse zu erstellen!

Relevante Angebote per E-Mail an Kandidaten senden

import smtplib
from email.message import EmailMessage

# Connect to SMTP server 
smtp = smtplib.SMTP(‘smtp.domain.com‘)

for listing in listings:

  # Check if listing matches candidate skills  

  if match:

    msg = EmailMessage()
    msg[‘Subject‘] = f‘New job for you - {listing["title"]}‘  
    msg[‘From‘] = ‘[email protected]‘
    msg[‘To‘] = ‘[email protected]‘
    msg.set_content(listing[‘desc‘])

    # Send listing to candidate
    smtp.send_message(msg)

smtp.quit()

Mit Python ist es ganz einfach, Bewerbern automatisch per E-Mail neue Angebote zuzusenden, die ihren Fähigkeiten und Interessen entsprechen.

Dies ist nur eine kleine Auswahl – mit Daten zu Millionen von Einträgen sind die Möglichkeiten endlos!

Schauen wir uns nun an, wie dieser Scraper automatisch ausgeführt wird.

Planen täglicher Indeed-Scrapings

Während das Scrapen von Indeed in Echtzeit nützlich ist, ist das Einrichten noch wertvoller automatisierte, geplante Scrapes um Ihre Daten aktuell zu halten.

Hier sind zwei gute Optionen, um den Scraper nach einem festen, wiederkehrenden Zeitplan auszuführen:

cron Jobs

Eine einfache Möglichkeit, Python-Skripte zu automatisieren, ist cron, ein Standard-Linux-Dienstprogramm.

Fügen Sie einen Eintrag wie diesen hinzu, der täglich um 8 Uhr ausgeführt wird:

0 8 * * * python /home/user/indeedScraper.py

Sie können komplexe Wiederholungen planen. Aber cron kann nicht melden, wenn Scrapes fehlschlagen.

Kratzplattformen

Für eine robustere Planung und Automatisierung empfehle ich die Verwendung einer speziellen Scraping-Plattform wie Scrapy or Apify.

Diese bieten Browser- und Proxy-Automatisierung zur Verarbeitung von CAPTCHAs, Blöcken und JavaScript. Und sie verfügen über eine integrierte einfache Cron-Job-Planung.

Sie erhalten außerdem E-Mail-Benachrichtigungen, Leistungsanalysen und Integrationsoptionen. Sie nehmen der Automatisierung wirklich die Kopfschmerzen!

Hier ein kurzer Vergleich:

cron JobsKratzplattformen
AnzeigenPreiseFreiBezahlte Pläne
Proxys und Headless-BrowserBenötigt benutzerdefinierten CodeEnthaltene Funktionen
SchedulerGrundlegende WiederholungErweiterte Optionen
Überwachung & WarnungenAndereE-Mails und Dashboard
ErgebnisspeicherungManuelle HandhabungIntegrierter Speicher und Export

Für große, komplexe Websites wie Indeed empfehle ich die Verwendung einer dedizierten Plattform. Die zusätzliche Zuverlässigkeit und die zusätzlichen Funktionen lohnen sich beim Schaben in großem Maßstab.

Lassen Sie uns rekapitulieren

In diesem Leitfaden haben Sie Folgendes gelernt:

  • Warum Scraping Indeed eignet sich für Marktforschung, Jobsuche und Rekrutierungstools.

  • So erreichen Auflistungen extrahieren durch Nachahmung von Suchanfragen in Python.

  • Best Practices wie das Drosseln von Anfragen und die Verwendung von Proxys, um Blockaden zu vermeiden.

  • So erreichen Details analysieren wie Gehälter und Beschreibungen von Auflistungsseiten.

  • Automatisierungsoptionen wie Cron und spezielle Scraping-Plattformen, um Ihre Daten aktuell zu halten.

Die obigen Codebeispiele sollen Ihnen als Vorlage dienen, um mit dem Scraping Ihrer eigenen Indeed-Daten zu beginnen. Fühlen Sie sich frei, es für Ihren Anwendungsfall zu optimieren und darauf aufzubauen!

Denken Sie daran, die Nutzungsbedingungen von Indeed zu respektieren, zu aggressives Scraping zu vermeiden und eine gute Web-Scraping-Hygiene einzuhalten, um auf der richtigen Seite des Gesetzes zu bleiben.

Ich hoffe, dieser Leitfaden hat Ihnen einen umfassenden Überblick darüber gegeben, wie Sie Indeed mit Python effektiv scrapen können. Durch die Automatisierung dieser Schritte können Sie den unglaublichen Fundus an Stellenangebotsdaten von Indeed nutzen.

Lassen Sie mich wissen, wenn Sie weitere Fragen haben! Ich freue mich immer, mehr über Best Practices für Web Scraping zu besprechen.

Viel Glück bei Ihrem Indeed-Scraping-Projekt!

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *