Heutzutage erfolgt die Jobsuche größtenteils über Online-Plattformen, sodass es einfacher denn je ist, Stellenangebote zu finden. Mit dieser Bequemlichkeit geht jedoch auch die Herausforderung einher, eine riesige Menge an Informationen zu durchforsten, um die richtigen Stellenangebote zu finden. Hier kommt Web Scraping ins Spiel, eine leistungsstarke Technik aus der Welt der Datenextraktion.

Mithilfe von Web Scraping können Sie Ihre Herangehensweise an die Jobsuche verändern, indem Sie die Erfassung und Organisation von Job-Angebote. Anstatt Stunden damit zu verbringen, manuell verschiedene Jobbörsen und Websites zu durchsuchen, können Sie benutzerdefinierte Web Scraping-Skripte erstellen, um Stellenangebote zu sammeln, zu filtern und anzuzeigen, die auf Ihre Präferenzen zugeschnitten sind. Dies spart Ihnen nicht nur wertvolle Zeit, sondern stellt auch sicher, dass Sie keine versteckten Stellenangebote verpassen, die tief im Web vergraben sein könnten.

In diesem umfassenden Leitfaden werden wir untersuchen, wie Sie das Potenzial von Indeed Scraper nutzen können, indem Sie Crawlbase Crawling API um Ihren Jobsuchprozess auf einer der bekanntesten Websites mit Stellenangeboten zu optimieren. Egal, ob Sie ein Arbeitssuchender sind, der nach der perfekten Karrieremöglichkeit sucht, oder ein Datenenthusiast, der sich für die Beherrschung von Web Scraping-Techniken interessiert, diese Schritt-für-Schritt-Anleitung Python Dieser Leitfaden vermittelt Ihnen die Fähigkeiten, Ihre Jobsuche zu automatisieren und sie effektiver und effizienter zu gestalten. Tauchen Sie mit uns in die Welt des Web Scraping ein und entdecken Sie die unzähligen Möglichkeiten, die es bietet, um Ihre Jobsuche auf Indeed zu vereinfachen.

Was ist ein Job Scraper?

Ein Job Scraper ist eine Software oder ein Code, der Stellenausschreibungen aus verschiedenen Online-Quellen wie Jobbörsen, Unternehmensseiten oder Karriereportalen sammelt. Diese Tools extrahieren wichtige Details wie Berufsbezeichnungen, Beschreibungen, Anforderungen und Bewerbungsmodalitäten. Die gesammelten Daten werden häufig verwendet, um Jobtrends zu untersuchen, den Arbeitsmarkt zu erforschen oder Websites für die Jobsuche zu füllen.

Web Scraping spielt eine entscheidende Rolle bei der Vereinfachung und Optimierung der Jobsuche. So funktioniert es:

Die Rolle von Web Scraping bei der Jobsuche
  1. Zusammenfassen von Stellenangeboten: Mithilfe von Web Scraping können Sie Stellenangebote aus verschiedenen Quellen und Websites in einem einzigen Datensatz zusammenfassen. So haben Sie an einem Ort Zugriff auf eine Vielzahl von Stellenangeboten und müssen nicht mehrere Websites besuchen.

  2. Automatisierung des Datenabrufs: Anstatt Stellendetails manuell zu kopieren und einzufügen, automatisiert Web Scraping den Datenabrufprozess. Mit dem richtigen Scraping-Skript können Sie Stellenbezeichnungen, Firmennamen, Stellenbeschreibungen, Standorte und mehr extrahieren, ohne wiederholte manuelle Aufgaben ausführen zu müssen.

  3. Benutzerdefinierte Suchen: Mithilfe von Web Scraping können Sie Ihre Jobsuche individuell anpassen. Sie können spezifische Suchkriterien und Filter einrichten, um Stellenangebote zu extrahieren, die Ihren Präferenzen entsprechen. Durch diese Anpassung können Sie sich auf die relevantesten Möglichkeiten konzentrieren.

  4. Echtzeit-Updates: Indem Sie die Ausführung von Web Scraping-Skripten in regelmäßigen Abständen planen, können Sie Echtzeit-Updates zu neuen Stellenangeboten erhalten. So stellen Sie sicher, dass Sie als einer der Ersten über Stellenangebote in Ihrem gewünschten Bereich informiert werden.

In den folgenden Abschnitten werden wir untersuchen, wie Sie Web Scraping nutzen können, insbesondere mithilfe der Crawlbase Crawling API, um Stellenangebote effizient von Indeed zu scrapen. Diese Schritt-für-Schritt-Anleitung vermittelt Ihnen die Fähigkeiten, Ihre Jobsuche zu automatisieren und sie effektiver und effizienter zu gestalten.

Erste Schritte mit Crawlbase Crawling API

Auf Ihrem Weg, die Leistungsfähigkeit des Web Scraping für die Jobsuche auf Indeed zu nutzen, ist es wichtig, die Crawlbase zu verstehen. Crawling API ist von größter Bedeutung. In diesem Abschnitt werden die technischen Aspekte der Crawlbase-API erläutert und Sie erhalten das erforderliche Wissen, um sie nahtlos in Ihr Python-Job-Scraping-Projekt zu integrieren.

Anfrage senden mit Crawling API

Crawlbases Crawling API ist auf Einfachheit und einfache Integration in Ihre Web-Scraping-Projekte ausgelegt. Alle API-URLs beginnen mit dem Basisteil: https://api.crawlbase.com. Ihr erster API-Aufruf ist so einfach wie das Ausführen eines Befehls in Ihrem Terminal:

1
curl 'https://api.crawlbase.com/?token=YOUR_CRAWLBASE_TOKEN&url=https%3A%2F%2Fgithub.com%2Fcrawlbase%3Ftab%3Drepositories'

Hier sehen Sie die token Parameter, der als Authentifizierungsschlüssel für den Zugriff auf die Web Scraping-Funktionen von Crawlbase dient. Crawlbase bietet zwei Arten von Token an, ein normales (TCP) Token und ein JavaScript (JS) Token. Wählen Sie das normale Token für Websites, die sich nicht stark ändern, wie z. B. statische Websites. Wenn Sie jedoch Informationen von einer Site abrufen möchten, die nur funktioniert, wenn Benutzer Webbrowser mit JavaScript verwenden, oder wenn die wichtigen Dinge, die Sie möchten, auf der Benutzerseite per JavaScript erstellt werden, sollten Sie das JavaScript-Token verwenden. Wie bei Indeed benötigen Sie das JavaScript-Token, um das zu erhalten, was Sie möchten.

API-Antwortzeit und -Format

Bei der Interaktion mit der Crawlbase Crawling APIist es wichtig, die Reaktionszeiten zu verstehen und zu wissen, wie Erfolg oder Misserfolg zu interpretieren sind. Hier ist ein genauerer Blick auf diese Aspekte:

Reaktionszeit: Normalerweise liegt die API-Antwortzeit im Bereich von 4 bis 10 Sekunden. Um ein nahtloses Erlebnis zu gewährleisten und mögliche Verzögerungen auszugleichen, ist es ratsam, ein Timeout für Aufrufe von mindestens 90 Sekunden festzulegen. Dadurch wird sichergestellt, dass Ihre Anwendung Schwankungen bei den Antwortzeiten ohne Unterbrechungen verarbeiten kann.

Antwortformate: Wenn Sie eine Anfrage an Crawlbase stellen, können Sie je nach Ihren Präferenzen und Analyseanforderungen flexibel zwischen den Antwortformaten HTML und JSON wählen. Sie können den Abfrageparameter „format“ mit dem Wert „html“ oder „json“ übergeben, um das erforderliche Format auszuwählen.

Wenn Sie das HTML-Antwortformat auswählen (das ist die Standardeinstellung), erhalten Sie den HTML-Inhalt der Webseite als Antwort. Die Antwortparameter werden den Antwortheadern für einen einfachen Zugriff hinzugefügt. Hier ist eine Beispielantwort:

1
2
3
4
5
6
7
Headers:
URL: https://github.com/crawlbase?tab=repositories
ursprünglicher_status: 200
pc_status: 200

Korpus:
HTML der Seite

Wenn Sie sich für das JSON-Antwortformat entscheiden, erhalten Sie ein strukturiertes JSON-Objekt, das in Ihrer Anwendung problemlos analysiert werden kann. Dieses Objekt enthält alle benötigten Informationen, einschließlich der Antwortparameter. Hier ist eine Beispielantwort:

1
2
3
4
5
6
{
"ursprünglicher_Status": "200",
"pc_status": 200,
"URL": "https%3A%2F%2Fgithub.com%2Fcrawlbase%3Ftab%3Drepositories",
"Karosserie": "HTML der Seite"
}

Antwort-Header: Sowohl HTML- als auch JSON-Antworten enthalten wichtige Header, die wertvolle Informationen über die Anfrage und ihr Ergebnis liefern:

  • url: Die ursprüngliche URL, die in der Anfrage gesendet wurde, oder die URL aller Weiterleitungen, denen Crawlbase gefolgt ist.
  • original_status: Die Statusantwort, die Crawlbase beim Crawlen der in der Anfrage gesendeten URL erhält. Es kann jeder gültige HTTP-Statuscode sein.
  • pc_status: Der Crawlbase (pc)-Statuscode, der jeder beliebige Statuscode sein kann und der Code ist, der am Ende gültig ist. Wenn eine Website beispielsweise einen original_status von 200 mit einer CAPTCHA-Herausforderung, die pc_status könnte 503 sein.
  • body (Nur JSON): Dieser Parameter ist im JSON-Format verfügbar und enthält den Inhalt der Webseite, die Crawlbase als Ergebnis des Proxy-Crawlings der in der Anfrage gesendeten URL gefunden hat.

Mithilfe dieser Antwortparameter können Sie das Ergebnis Ihrer Anfragen beurteilen und feststellen, ob Ihr Web-Scraping-Vorgang erfolgreich war.

Crawling API Parameter

Crawlbase bietet einen umfassenden Satz von Parametern, mit denen Entwickler ihre Web-Crawling-Anfragen anpassen können. Diese Parameter ermöglichen eine Feinabstimmung des Crawling-Prozesses, um bestimmte Anforderungen zu erfüllen. Sie können beispielsweise Antwortformate wie JSON oder HTML mit dem Parameter „format“ angeben oder die Seitenwartezeiten mit „page_wait“ steuern, wenn Sie mit JavaScript-generierten Inhalten arbeiten.

Darüber hinaus können Sie Cookies und Header extrahieren, benutzerdefinierte Benutzeragenten festlegen, Screenshots aufnehmen und sogar Geolokalisierungseinstellungen mithilfe von Parametern wie „get_cookies“, „user_agent“, „screenshot“ und „country“ auswählen. Diese Optionen bieten Flexibilität und Kontrolle über den Web-Crawling-Prozess. Um beispielsweise von der ursprünglichen Website gesetzte Cookies abzurufen, können Sie einfach „&get_cookies=true“ in Ihre API-Anfrage aufnehmen und Crawlbase gibt die Cookies in den Antwortheadern zurück.

Sie können mehr über Crawlbase lesen Crawling API Parameter HIER.

Kostenlose Testversion, Gebührenstrategie und Ratenbegrenzung

Crawlbase bietet eine kostenlose Testversion an, die die ersten 1,000 Anfragen umfasst, sodass Sie die Funktionen testen können, bevor Sie sich festlegen. Es ist jedoch wichtig, diesen Testzeitraum optimal zu nutzen, um das Beste daraus zu machen.

Crawlbase arbeitet nach dem Modell „Zahlen Sie nur, was Sie nutzen“. Wichtig ist, dass Crawlbase nur für erfolgreiche Anfragen Gebühren berechnet, was es für Ihre Web Scraping-Anforderungen kostengünstig und effizient macht. Erfolgreiche Anfragen werden durch die Überprüfung der original_status und pc_status in den Antwortparametern.

Die API ist auf maximal 20 Anfragen pro Sekunde und Token begrenzt. Wenn Sie eine höhere Ratenbegrenzung benötigen, können Sie sich an den Support wenden, um Ihre spezifischen Anforderungen zu besprechen.

Crawlbase Python-Bibliothek

Die Crawlbase Python-Bibliothek bietet eine einfache Möglichkeit zur Interaktion mit der Crawlbase Crawling API. Sie können diese leichte und abhängigkeitsfreie Python-Klasse als Wrapper für die Crawlbase-API verwenden. Initialisieren Sie zunächst die Crawling API Klasse mit Ihrem Crawlbase-Token. Anschließend können Sie GET-Anfragen stellen, indem Sie die URL angeben, die Sie scrapen möchten, sowie alle gewünschten Optionen, wie benutzerdefinierte Benutzeragenten oder Antwortformate. Sie können beispielsweise eine Webseite scrapen und auf deren Inhalt wie folgt zugreifen:

1
2
3
4
5
6
7
8
9
für Crawlbase importieren CrawlingAPI

# Initialisieren Sie die CrawlingAPI-Klasse
api = CrawlingAPI({ 'Zeichen': 'IHR_CRAWLBASE_TOKEN' })

# Machen Sie eine GET-Anfrage, um eine Webseite zu scrapen
Antwort = api.get(„https://www.example.com“)
if Antwort['Statuscode'] == 200:
drucken(Antwort['Körper'])

Diese Bibliothek vereinfacht das Abrufen von Webdaten und ist besonders nützlich für Szenarien, in denen dynamische Inhalte, IP-Rotation und andere erweiterte Funktionen der Crawlbase-API erforderlich sind.

Scrapen Sie Indeed-Daten wie Stellenangebote

Um Stellenanzeigen effektiv von Indeed zu scrapen, ist es wichtig, die Struktur der Website und die Organisation der Stellenangebote zu verstehen.

Indeed-Seite zur Jobsuche

Website: Wenn Sie zum ersten Mal auf der Homepage von Indeed landen, sehen Sie eine einfache Suchleiste, in die Sie Schlüsselwörter, Berufsbezeichnungen oder Firmennamen eingeben können. Diese Suchfunktion ist Ihr Tor zum Auffinden spezifischer Stellenangebote. Sie können auch Standortdetails angeben, um Ihre Suche auf eine bestimmte Stadt, ein bestimmtes Bundesland oder ein bestimmtes Land einzugrenzen.

Search Results: Wenn Sie Ihre Suchkriterien eingeben und auf die Schaltfläche „Suchen“ klicken, zeigt Indeed eine Liste mit Stellenangeboten an, die Ihrer Suchanfrage entsprechen. Diese Angebote sind in der Regel in umgekehrter chronologischer Reihenfolge angeordnet, wobei die aktuellsten Angebote ganz oben erscheinen. Jedes Angebot enthält wichtige Details wie die Stellenbezeichnung, den Firmennamen, den Standort und eine kurze Stellenbeschreibung.

Filters: Indeed bietet auf der linken Seite der Suchergebnisseite verschiedene Filter an. Mit diesen Filtern können Sie Ihre Suche weiter verfeinern. Sie können Stellenangebote nach Stellenart (z. B. Vollzeit, Teilzeit), Gehaltsschätzung, Standort, Unternehmen und mehr filtern. Mithilfe dieser Filter können Sie Stellenangebote finden, die genau Ihren Kriterien entsprechen.

Seitennummerierung: Wenn es viele Stellenangebote gibt, die Ihrer Suche entsprechen, führt Indeed eine Paginierung durch. Sie werden feststellen, dass auf jeder Seite nur eine begrenzte Anzahl von Stellenangeboten angezeigt wird. Um auf weitere Angebote zuzugreifen, müssen Sie auf die Seitenzahlen oder die Schaltfläche „Weiter“ unten in den Suchergebnissen klicken. Das Verständnis der Paginierung ist entscheidend, um mehrere Seiten mit Stellenangeboten zu durchsuchen.

Einrichten Ihrer Entwicklungsumgebung

Bevor Sie mit dem Web Scraping von Indeed-Stellenausschreibungen mit Python beginnen können, müssen Sie Ihre Entwicklungsumgebung einrichten. Dazu müssen Sie die erforderlichen Tools und Bibliotheken installieren und die richtige integrierte Entwicklungsumgebung (IDE) für Ihre Codierungsaufgaben auswählen.

Python installieren

Python ist die primäre Programmiersprache, die wir für Web Scraping verwenden. Wenn Sie Python noch nicht auf Ihrem System installiert haben, führen Sie diese Schritte aus:

  1. Python herunterladen: Besuchen Sie die offizielle Python-Website unter python.org und laden Sie die neueste Version von Python herunter. Wählen Sie das entsprechende Installationsprogramm für Ihr Betriebssystem (Windows, macOS oder Linux).

  2. Installation: Führen Sie das heruntergeladene Installationsprogramm aus und folgen Sie den Installationsanweisungen. Aktivieren Sie während der Installation unbedingt die Option, die Python zum PATH Ihres Systems hinzufügt. Dieser Schritt ist entscheidend, um Python über die Befehlszeile auszuführen.

  3. Installation überprüfen: Öffnen Sie eine Eingabeaufforderung oder ein Terminal und geben Sie den folgenden Befehl ein, um zu überprüfen, ob Python korrekt installiert ist:

1
Python --Version

Sie sollten die installierte Python-Version angezeigt sehen.

Erforderliche Bibliotheken installieren

Python bietet ein umfangreiches Ökosystem an Bibliotheken, die das Web Scraping vereinfachen. Für dieses Projekt benötigen Sie die Crawlbase-Bibliothek zum Erstellen von Webanforderungen mit der Crawlbase-API und die Beautiful Soup-Bibliothek zum Parsen von HTML-Inhalten. Verwenden Sie zum Installieren dieser Bibliotheken die folgenden Befehle:

  1. Crawlbase: Die crawlbase Die Bibliothek ist ein Python-Wrapper für die Crawlbase-API, der es uns ermöglicht, Webanforderungen effizient zu stellen.
1
pip installieren crawlbase
  1. Schöne Suppe: Beautiful Soup ist eine Bibliothek zum Parsen von HTML- und XML-Dokumenten. Sie ist besonders nützlich zum Extrahieren von Daten aus Webseiten.
1
pip install beautifulsoup4

Wenn diese Bibliotheken installiert sind, verfügen Sie über die Tools, die Sie benötigen, um Webseiten mithilfe der Crawlbase-API abzurufen und deren Inhalt während des Scraping-Prozesses zu analysieren.

Auswahl der richtigen Entwicklungs-IDE

Eine integrierte Entwicklungsumgebung (IDE) bietet eine Codierumgebung mit Funktionen wie Codehervorhebung, Autovervollständigung und Debugging-Tools. Sie können Python-Code zwar in einem einfachen Texteditor schreiben, aber die Verwendung einer IDE kann Ihre Entwicklungserfahrung erheblich verbessern.

Hier sind einige beliebte Python-IDEs, die Sie in Betracht ziehen sollten:

  1. PyCharm: PyCharm ist eine robuste IDE mit einer kostenlosen Community Edition. Sie bietet Funktionen wie Codeanalyse, einen visuellen Debugger und Unterstützung für die Webentwicklung.

  2. Visual Studio-Code (VS-Code): VS Code ist ein kostenloser, quelloffener Code-Editor, der von Microsoft entwickelt wurde. Er verfügt über eine umfangreiche Erweiterungsbibliothek und ist daher vielseitig für verschiedene Programmieraufgaben geeignet, einschließlich Web Scraping.

  3. Jupyter Notizbuch: Jupyter Notebook eignet sich hervorragend für interaktive Codierung und Datenexploration. Es wird häufig in Data-Science-Projekten verwendet.

  4. Spyder: Spyder ist eine IDE für wissenschaftliche und datenbezogene Aufgaben. Es bietet Funktionen wie Variablen-Explorer und interaktive Konsole.

Wählen Sie die IDE, die Ihren Präferenzen und Ihrem Arbeitsablauf am besten entspricht. Sobald Sie Python installiert, die erforderlichen Bibliotheken eingerichtet und die von Ihnen gewählte IDE bereit haben, können Sie mit dem Erstellen Ihres Indeed-Job-Scrapers in Python beginnen.

Erstellen Sie Ihren Indeed-Job-Scraper

In diesem Abschnitt führen wir Sie durch den Prozess der Erstellung eines leistungsstarken Indeed-Job-Scrapers mit Python. Mit diesem Scraper können Sie Stellenangebote sammeln, die Seitennummerierung auf Stellensuchseiten verwalten, detaillierte Informationen aus Stellenausschreibungsseiten extrahieren und diese Daten effizient in einer SQLite-Datenbank speichern.

Scraping-Stellenangebote

Um mit dem Scraping von Stellenangeboten von Indeed.com zu beginnen, müssen wir verstehen, wie wir Anfragen an die Website stellen und die Ergebnisse analysieren. Wenn Sie die Homepage von Indeed besuchen und eine Suchanfrage für einen Job stellen, werden Sie feststellen, dass die Website Sie zu einer Such-URL mit bestimmten Parametern weiterleitet, wie diesen:

1
https://www.indeed.com/jobs?q=Web+Developer&l=Virginia

Hier suchen wir nach Webentwickler-Jobs in Virginia und die URL enthält Parameter wie q=Web+Developer für die Jobanfrage und l=Virginia für den Standort. Um dies mithilfe der Crawlbase-Bibliothek in Ihrem Python-Code zu replizieren, können Sie das folgende Beispiel verwenden:

1
2
3
4
5
6
7
8
für Crawlbase importieren CrawlingAPI

api = CrawlingAPI({'Zeichen': 'IHR_CRAWLBASE_JS_TOKEN'})

Antwort = api.get(„https://www.indeed.com/jobs?Web+Developer&l=Virginia“)
if Antwort['Statuscode'] == 200:
# Bearbeiten Sie hier die Seite mit den Stellenangeboten
drucken(Antwort['Körper'])

Dieser Codeausschnitt zeigt, wie Sie eine GET-Anfrage an die Jobsuchseite von Indeed senden. Sobald Sie den HTML-Inhalt der Jobangebotsseite haben, können Sie ihn analysieren, um die Jobangebote zu extrahieren.

Wir könnten das HTML-Dokument mit CSS- oder XPath-Selektoren analysieren, aber es geht auch einfacher: Wir können alle tief im HTML versteckten Daten der Stellenausschreibung als JSON-Dokument finden:

Wir können reguläre Ausdrücke verwenden, um diese JSON-Daten effizient zu extrahieren. Lassen Sie uns das vorherige Beispiel aktualisieren, um das Scraping von Stellenangeboten zu handhaben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
importieren re
importieren JSON
für Crawlbase importieren CrawlingAPI

api = CrawlingAPI({'Zeichen': 'IHR_CRAWLBASE_JS_TOKEN'})

# Funktion zum Parsen des HTML der Suchseite
def Suchseite_html analysieren(html: str):
Daten = re.findall(r'window.mosaic.providerData\["mosaic-provider-jobcards"\]=(\{.+?\});', html)
Daten = json.loads(Daten[0])
Rückkehr {
"Ergebnisse": Daten["Metadaten"]["mosaicProviderJobCardsModel"]["Ergebnisse"],
"Meta": Daten["Metadaten"]["mosaicProviderJobCardsModel"]["tierZusammenfassungen"],
}

Antwort = api.get(„https://www.indeed.com/jobs?Web+Developer&l=Virginia“, {'Land': 'UNS'})
if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')

# Rufen Sie die Funktion parse_job_listings mit der HTML-Seite mit den Stellenangeboten auf
Stellenangebote = Suchseite_html_parsen(HTML-Inhalt)
drucken(json.dumps(job_listings, Einzug=2))

Die Funktion, parse_search_page_html, wird verwendet, um Stellenanzeigendaten aus dem HTML-Quellcode einer Indeed-Stellensuchseite zu extrahieren. Es verwendet reguläre Ausdrücke, um eine bestimmte JavaScript-Variable zu finden mosaic-provider-jobcards enthält strukturierte Stellenausschreibungsinformationen im JSON-Format. Anschließend analysiert es diese JSON-Daten und extrahiert zwei Hauptkomponenten: „Ergebnisse“, das die Stellenausschreibungen enthält, und „Meta“, das Metadaten zu den Stellenausschreibungen enthält, z. B. die Anzahl der Ergebnisse in verschiedenen Kategorien. Die Funktion gibt diese strukturierten Daten als Python-Wörterbuch zur weiteren Verarbeitung zurück.

Beispielausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
{
"Ergebnisse": [
{
"adBlob": "...",
"Anzeigen-ID": "419399410",
"advn": "7790245867719370",
„angewendet oder größer“: falsch,
"KlickLoggingUrl": "...",
"Unternehmen": "Das Gasthaus in Little Washington",
"Unternehmensmarkenattribute": {
"headerImageUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_headerimage/1960x400/d9ca093411583ed06046ab18078e777d",
"logoUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/1b781c60efb593aa39cd69478346b673"
},
"companyIdEncrypted": "30de376f4842f806",
"Unternehmensübersichtslink": "/cmp/Inn-At-Little-Washington",
"companyOverviewLinkCampaignId": „serp-linkcompanyname-content“,
"Firmenbewertung": 3.1,
"Unternehmensbewertungsanzahl": 30,
"Unternehmensbewertungslink": "/cmp/Inn-At-Little-Washington/Bewertungen",
"companyReviewLinkCampaignId": "cmplinktst2",
„d2iAktiviert“: falsch,
"AnzeigeTitel": „Mitarbeiter an der Rezeption“,
"dradisJob": falsch,
"ArbeitgeberAssistEnabled": falsch,
"arbeitgeberResponsive": falsch,
"verschlüsselteFccompanyId": "11dc5e49b00978a6",
"verschlüsselteErgebnisdaten": "VwIPTVJ1cTn5AN7Q-tSqGRXGNe2wB2UYx73qSczFnGU",
„erweitertesAttributeModel“: {},
"Verführer": [],
"Abgelaufen": falsch,
"TrackingURLs extrahieren": "",
„extrahiertesGehalt“: {
"max": 22,
"Mindest": 22,
"Typ": "stündlich"
},
"fccompanyId": -1,
"hervorgehobeneUnternehmensattribute": {},
„vorgestellter Arbeitgeber“: falsch,
„vorgestellter Arbeitgeberkandidat“: falsch,
"Feed-ID": 297995,
"formatierter Standort": "Washington, VA 22747",
"formatierte relative Zeit": "Vor 20 Tagen",
"MetaData ausblenden": falsch,
„Modell für hohe Einstellungsvolumina“: {
„hohes Einstellungsvolumen“: falsch
},
„EinstellungsereignisJob“: falsch,
"homepageJobFeedSectionId": "0",
„in der TatApplyEnabled“: was immer dies auch sein sollte.,
„in der Tat anwendbar“: was immer dies auch sein sollte.,
„istJobVisited“: falsch,
„istMobileThirdPartyApplyable“: falsch,
„istKeinLebenslaufJob“: falsch,
"istNebenjob": falsch,
"jobCardAnforderungsmodell": {
"Anzahl der zusätzlichen Anforderungen": 0,
"AnforderungenHeader angezeigt": falsch
},
"ArbeitsstandortStadt": "Washington",
"ArbeitsortPostleitzahl": "22747",
"Arbeitsstandortstaat": "VA",
"Jobtypen": [],
"Jobschlüssel": „72ed373141879fd4“,
„jsiAktiviert“: falsch,
"Verknüpfung": "...",
"Standortanzahl": 1,
"mobtk": „1hasil75vimhq800“,
"mehrLocUrl": "/jobs?q=&l=Virginia&radius=35&jtid=5bdc6c9a550a63f1&jcid=30de376f4842f806&grp=tcl",
"mouseDownHandlerOption": {
"Anzeigen-ID": 419399410,
"advn": "7790245867719370",
"TrackingURLs extrahieren": [],
"von": "vj",
"Jobschlüssel": „72ed373141879fd4“,
"Verknüpfung": "...",
"tk": „1hasil75vimhq800“
},
"neuerJob": falsch,
"Normtitel": „Mitarbeiter an der Rezeption“,
"offeneInterviewsInterviewsVorOrt": falsch,
"offeneInterviewsJob": falsch,
"offeneInterviewsAngeboteSofort": falsch,
"offeneInterviewsTelefonJob": falsch,
"organicApplyStartCount": 19,
„overrideIndeedApplyText“: was immer dies auch sein sollte.,
"präzisesStandortmodell": {
"Standort verschleiern": falsch,
„JCMPreciseLocationModel überschreiben“: was immer dies auch sein sollte.
},
"Veröffentlichungsdatum": 1693458000000,
"RankingScoresModell": {
"Gebot": 219074,
„elektronische Bewerbung“: 0.00094590354,
"eQualifiziert": 0
},
„Umleitung zu Drittanbieter-Site“: falsch,
"entfernter Standort": falsch,
"LebenslaufMatch": falsch,
"Gehaltsausschnitt": {
"Währung": "US DOLLAR",
"GehaltsTextFormatiert": falsch,
"Quelle": "EXTRAKTION",
"text": „22 Dollar pro Stunde“
},
"gespeichert": falsch,
"gespeicherteAnwendung": falsch,
"screenerQuestionsURL": „https://gateway.harri.com/dispatcher/api/v1/indeed/jobs/1064851/screening_questions“,
"Such-UID": „1hasil75vimhq800“,
„zeigeErreichbarkeitsabzeichen“: falsch,
"zeigePendelPromo": falsch,
„Frühzeitig bewerben“ anzeigen: falsch,
"Jobtyp anzeigen": falsch,
"zeigeRelativesDatum": was immer dies auch sein sollte.,
"SponsoredLabel anzeigen": falsch,
„zeigeStrongerAppliedLabel“: falsch,
„smartFillEnabled“: falsch,
„smbD2iAktiviert“: falsch,
„Ausschnitt“: "...",
"Quell-ID": 38357,
"gesponsert": was immer dies auch sein sollte.,
"taxoAttributes": [],
"taxoAttributesDisplayLimit": 3,
"taxoLogAttributes": [],
"Taxonomieattribute": [
{
„Attribute“: [
{
"Etikette": „Flexibler Zeitplan“,
"suid": "WZ9TD"
},
{
"Etikette": "Empfehlungsprogramm",
"suid": "YDH5H"
}
],
"Etikette": "dynamische Attribute"
},
...
],
"thirdPartyApplyUrl": "...",
"Tier": {
„übereinstimmende Einstellungen“: {
"langeMatchedPreferences": [],
"stringMatchedPreferences": []
},
"Typ": "STANDARD"
},
„Titel“: „Mitarbeiter an der Rezeption“,
"übersetzteAttribute": [],
„übersetzteCmiJobTags“: [],
"abgekürzteFirma": "Das Gasthaus in Little Washington",
„Wir suchen dringend“: falsch,
"JobLink anzeigen": "...",
„vjVorgestellterArbeitgeberKandidat“: falsch,
"ArbeitsplatzEinblicke": []
},
...
],
"Meta": [
{
"Jobanzahl": 198731,
"Tier": 0,
"Typ": "STANDARD"
},
{
"Jobanzahl": 1371,
"Tier": 1,
"Typ": "BUNDESWEIT"
}
]
}

Umgang mit Paginierung

Die Jobsuchergebnisse von Indeed sind normalerweise paginiert. Um die Paginierung zu handhaben und mehrere Seiten mit Stellenangeboten zu sammeln, können Sie die URL-Parameter ändern und zusätzliche Anfragen senden. Um mehrere Seiten zu scrapen, können Sie die URL anpassen start Parameter oder extrahieren Sie Paginierungsinformationen aus dem HTML.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
importieren JSON
importieren re
für urllib.parse importieren Urlencode
für Crawlbase importieren CrawlingAPI

# Funktion zum Parsen des HTML der Suchseite
def Suchseite_html analysieren(html: str):
Daten = re.findall(r'window.mosaic.providerData\["mosaic-provider-jobcards"\]=(\{.+?\});', html)
Daten = json.loads(Daten[0])
Rückkehr {
"Ergebnisse": Daten["Metadaten"]["mosaicProviderJobCardsModel"]["Ergebnisse"],
"Meta": Daten["Metadaten"]["mosaicProviderJobCardsModel"]["tierZusammenfassungen"],
}

# Funktion zum Scrapen von Stellenangeboten
def scrape_indeed_search(API, Abfrage: str, Standort: str, max_results: int = 50):
def Suchseiten-URL erstellen(Offset):
Parameter = {"Q": Abfrage, "l": Standort, "Filter": 0, "Anfang": Versatz}
Rückkehr f"https://www.indeed.com/jobs?{urlencode(Parameter)}"

Ergebnisse = []

drucken(f"Scraping der ersten Seite der Suche: query={Abfrage}, Standort={Standort}")
Antwort_erste_Seite = api.get(Suchseiten-URL erstellen(0), {'Land': 'UNS'})

if Antwort_erste_Seite['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort_erste_Seite['Körper'].dekodieren('lateinisch1')

Daten_erste_Seite = Suchseite_html_parsen(HTML-Inhalt)
Ergebnisse = Daten_erste_Seite["Ergebnisse"]
Gesamtergebnisse = Summe(Kategorie["Jobanzahl"] für Kategorie in Daten_erste_Seite["Meta"])

if Gesamtergebnisse > Maxergebnisse:
Gesamtergebnisse = Maxergebnisse

drucken(f"Abkratzen der restlichen {Gesamtergebnisse // 10} Seiten")

# Sammeln Sie die URLs für andere Seiten
andere_seiten = [Suchseiten-URL erstellen(Offset) für Offset in Angebot(10, Gesamtergebnisse, 10)]

für URL in andere_seiten:
Antwort = api.get(URL, {'Land': 'UNS'})
if Antwort['Statuscode'] == 200:
Ergebnisse.erweitern(Suchseite_html_parsen(Antwort.text))

Rückkehr Ergebnisse

def Haupt-
api = CrawlingAPI({'Zeichen': 'IHR_CRAWLBASE_JS_TOKEN'})
Suchdaten = scrape_indeed_search(API, Abfrage="Web-Entwickler", Standort="Virginia")
drucken(json.dumps(Suchdaten, Einzug=2))

if __name__ == "__hauptsächlich__":
Main()

Die scrape_indeed_search Die Funktion beginnt mit einer ersten Anfrage an die Indeed-Suchseite unter Verwendung der angegebenen Abfrage und des angegebenen Standorts. Anschließend prüft sie den Statuscode der Antwort, um sicherzustellen, dass die Anfrage erfolgreich war (Statuscode 200). Wenn die Anfrage erfolgreich war, analysiert sie die Stellenanzeigendaten aus dem HTML der ersten Seite.

Zur Handhabung der Seitennummerierung berechnet der Code die Gesamtzahl der für die jeweilige Abfrage und den jeweiligen Standort verfügbaren Stellenangebote. Außerdem wird ermittelt, wie viele Seiten durchsucht werden müssen, um das vom Benutzer festgelegte maximale Ergebnislimit zu erreichen. Um die URLs der verbleibenden Seiten zu erfassen, wird eine Liste mit Seiten-URLs generiert, jede mit einem inkrementellen Offset, um den nächsten Ergebnissatz abzurufen.

Dann initiiert es Crawling API Anfrage für jede der generierten Seiten-URLs. Beim Abrufen jeder Seite werden die Stellenangebote extrahiert und der results Liste. Dieser Ansatz stellt sicher, dass das Skript die Seitennummerierung nahtlos handhaben kann, alle relevanten Stellenangebote durchsucht und gleichzeitig den Abruf mehrerer Seiten effizient verwaltet.

Extrahieren von Daten aus der Seite mit den Stellenausschreibungen

Sobald Sie die Stellenangebote haben, möchten Sie möglicherweise weitere Details extrahieren, indem Sie die gesamten Seiten mit den Stellenangeboten durchsuchen. Die Suchergebnisse umfassen fast alle Informationen zu den Stellenangeboten, mit Ausnahme bestimmter Einzelheiten wie einer umfassenden Stellenbeschreibung. Um diese fehlenden Informationen zu extrahieren, benötigen wir die Stellen-ID, die praktischerweise im Feld „Jobkey“ in unseren Suchergebnissen zu finden ist:

1
2
3
{
"Jobschlüssel": "6a45faa5d8d817fa"
}

Mithilfe dieses Jobschlüssels können wir eine Anfrage für die vollständige Seite mit den Jobdetails senden. Ähnlich wie bei unserer ersten Suche können wir die eingebetteten Daten anstelle der HTML-Struktur analysieren:

Diese Daten sind in der Variable _initialData versteckt und können mithilfe eines einfachen regulären Ausdrucksmusters abgerufen werden. So können Sie das tun:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
importieren JSON
importieren re
für Crawlbase importieren CrawlingAPI

# Funktion zum Parsen der HTML-Seite mit Stellenausschreibungen
def Jobseite_html_analysieren(html):
Daten = re.findall(r"_initialData=(\{.+?\});", html)
Daten = json.loads(Daten[0])
Rückkehr Daten["jobInfoWrapperModel"]["JobInfoModel"]

# Funktion zum Scrapen von Jobdetails von Jobseiten
def scrape_indeed_jobs(API, Jobschlüssel):
URLs = [f"https://www.indeed.com/m/basecamp/viewjob?viewtype=embedded&jk={job_key}" für Jobschlüssel in Jobschlüssel]
gekratzt = []

für URL in URLs:
Antwort = api.get(URL, {'Land': 'UNS'})
if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')
scraped.append(job_page_html_parsen(html_Inhalt))

Rückkehr abgekratzt

# Anwendungsbeispiel
def Haupt-
api = CrawlingAPI({'Zeichen': 'IHR_CRAWLBASE_JS_TOKEN'})
job_keys = ["6a45faa5d8d817fa" #, "ein anderer_Jobschlüssel"
]
job_details = scrape_indeed_jobs(API, Jobschlüssel)
drucken(json.dumps(job_details, Einzug=2))

if __name__ == "__hauptsächlich__":
Main()

Beispielausgabe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
[
{
„angewandtesStateBannerModel“: null,
"PendelInfoModel": null,
"abgelaufenesJobMetadataModel": null,
"hideCmpHeader": falsch,
„isSmbD2iEnabled“: falsch,
"jobDebugInfoModel": null,
"Stellenbeschreibungsabschnittsmodell": null,
"jobInfoHeaderModel": {
„a11yNewtabIconActive“: was immer dies auch sein sollte.,
"FirmenbilderModell": {
"ejiBannerAlsHintergrund": falsch,
„erweiterteJobbeschreibung“: was immer dies auch sein sollte.,
„vorgestellter Arbeitgeber“: was immer dies auch sein sollte.,
"headerImageUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_headerimage/1960x400/54cdc45f26b1795da078ef999c776400",
"logoAltText": „TSA-Logo (Transportation Security Administration)“,
"logoImageOverlayLower": was immer dies auch sein sollte.,
"logoUrl": "https://d2q79iu7y748jz.cloudfront.net/s/_squarelogo/256x256/bfc3ae8c1b80ebe9aeb76708e8b8bf7c",
"BannerTop anzeigen": was immer dies auch sein sollte.,
"zeigeEnhancedJobImp": was immer dies auch sein sollte.,
"Symbol im Titel anzeigen": falsch
},
"Name der Firma": „TSA (Transportsicherheitsbehörde)“,
"Unternehmensübersichtslink": "https://www.indeed.com/cmp/TSA-(transportation-Security-Administration)?campaignid=mobvjcmp&from=mobviewjob&tk=1haso8g6sgsqe800&fromjk=6a45faa5d8d817fa",
"Unternehmensbewertungslink": "https://www.indeed.com/cmp/TSA-(transportation-Security-Administration)/reviews?campaignid=mobvjcmp&cmpratingc=mobviewjob&from=mobviewjob&tk=1haso8g6sgsqe800&fromjk=6a45faa5d8d817fa&jt=Uniformed+Advisor",
"Unternehmensbewertungsmodell": {
"Name der Firma": „TSA (Transportsicherheitsbehörde)“,
"desktopCompanyLink": "https://www.indeed.com/cmp/TSA-(transportation-Security-Administration)/reviews?campaignid=viewjob&cmpratingc=mobviewjob&from=viewjob&tk=1haso8g6sgsqe800&fromjk=6a45faa5d8d817fa&jt=Uniformed+Advisor",
"mobileCompanyLink": "https://www.indeed.com/cmp/TSA-(transportation-Security-Administration)/reviews?campaignid=mobvjcmp&cmpratingc=mobviewjob&from=mobviewjob&tk=1haso8g6sgsqe800&fromjk=6a45faa5d8d817fa&jt=Uniformed+Advisor",
"navigierbaresContainermodell": {
"Inhalts-HTML": null,
„hatBorderBottom“: was immer dies auch sein sollte.,
„hatOberste Grenze“: was immer dies auch sein sollte.,
"href": null,
"istRTL": falsch
},
"Bewertungsmodell": {
"ariaContent": „3.1 von 5 Sternen. Link zu 2,866 Unternehmensbewertungen (wird in einem neuen Tab geöffnet)“,
"Anzahl": 2866,
"Inhalt zählen": "2,866 Bewertungen",
"Beschreibungsinhalt": „Lesen Sie, was die Leute über die Arbeit hier sagen.“,
"Bewertung": 3.1,
"Anzahl anzeigen": was immer dies auch sein sollte.,
"Beschreibung anzeigen": was immer dies auch sein sollte.,
"Größe": null
}
},
"Arbeitgeberaktivität": null,
"ArbeitgeberResponsiveCardModel": null,
„verschlüsselteFccCompanyId“: null,
"formatierter Standort": "Springfield, Virginia",
"Bewertung ausblenden": falsch,
„isDesktopApplyButtonSticky“: falsch,
„istSimpleVjImproveActive“: was immer dies auch sein sollte.,
„isSimplifiedHeader“: falsch,
"berufNormTitel": null,
"Berufsbezeichnung": „Uniformierter Berater“,
"Jobtypen": null,
"Lage": null,
"mobileStickyVjHeaderActive": falsch,
„öffneCompanyLinksInNewTab“: falsch,
"übergeordneterFirmenname": „US-Regierung“,
"präzisesStandortmodell": null,
"Bewertungsmodell": null,
"aktuelle Suche": null,
"entfernter Standort": falsch,
"Fernarbeitsmodell": null,
"Gehaltswährung": null,
"GehaltMax": null,
"GehaltMin": null,
"Gehaltstyp": null,
"Untertitel": „TSA (Transportsicherheitsbehörde) – Springfield, VA“,
"tagModels": null,
"Taxonomieattribute": null,
"JobAnzeige anzeigen": "DESKTOP_EMBEDDED",
„Arbeitsplatz-Einblicksmodell“: null
},
"jobMetadataHeaderModel": {
"Jobtyp": ""
},
"JobTagModel": null,
"LebenslaufEvaluationsErgebnis": null,
„bereinigte Stellenbeschreibung“: " \N \N \N \N \N \N \N Überblick \N Uniformierter Berater \N Öffnungs- und Schließdaten \N \n 09 bis 15\n \N Gehaltsskala und Gehaltsstufe \N \n SV G\n \N Terminart \N \N Gehalt \N \n 2023 $ bis 09 $ pro Jahr\n \N Arbeitszeitplan \N \N \N \N \N \N Standort \N \n Springfield, Virginia\n \N \N \N \N \N Aufgaben \N Zusammenfassung \N \n Reisen sichern, Menschen schützen - Bei der Transportation Security Administration arbeiten Sie in einem Umfeld, in dem viel auf dem Spiel steht, um den amerikanischen Lebensstil zu schützen. In Städten im ganzen Land sichern Sie Flughäfen, Seehäfen, Eisenbahnen, Autobahnen und/oder öffentliche Verkehrssysteme und schützen so die amerikanische Verkehrsinfrastruktur und gewährleisten die Bewegungsfreiheit von Menschen und Handel.\n \N \N \N \N \N \N \N \n Ankündigungsnummer\n \N \n HQ-ADM-29-2023\n \N \n Kontrollnummer\n \N \n 78,592.00\n \N \N \N \N \N \N ",
"Screener-Anforderungsmodell": null,
"Abgelaufenen Header anzeigen": falsch,
"tagModels": null,
"JobAnzeige anzeigen": "DESKTOP_EMBEDDED"
}
]

Speichern von Daten in einer SQLite-Datenbank

Zum Speichern der extrahierten Jobdaten können Sie eine SQLite-Datenbank verwenden. Hier ist ein Beispielcode zum Erstellen einer Datenbank, zum Erstellen einer Tabelle für Stellenausschreibungen und zum Einfügen von Daten in diese.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
importieren JSON
importieren re
importieren sqlite3
für Crawlbase importieren CrawlingAPI

# Funktion zum Initialisieren der SQLite-Datenbank
def Datenbank initialisieren
Verbindung = sqlite3.connect(„in der Tat_Jobs.db“)
Cursor = conn.cursor()
Cursor.ausführen('' '
CREATE TABLE IF NOT EXISTS-Jobs (
job_title TEXT,
Firmen TEXT,
Standort TEXT,
job_description TEXT
)
'' ')
conn.commit()
Rückkehr Verbindung, Cursor

# Funktion zum Speichern von Jobdetails in einer SQLite-Datenbank
def in_Datenbank speichern(Cursor, Job):
Cursor.ausführen('' '
INSERT INTO jobs (Stellenbezeichnung, Unternehmen, Standort, Stellenbeschreibung)
WERTE (?, ?, ?, ?)
'' ', (Arbeit["Berufsbezeichnung"], Arbeit["Unternehmen"], Arbeit["Lage"], Arbeit["Stellenbeschreibung"]))
cursor.verbindung.commit()

# Funktion zum Parsen der HTML-Seite mit Stellenausschreibungen
def Jobseite_html_analysieren(html):
Daten = re.findall(r"_initialData=(\{.+?\});", html)
Daten = json.loads(Daten[0])
job_info = Daten["jobInfoWrapperModel"]["JobInfoModel"]
Rückkehr {
"Berufsbezeichnung": Jobinfo["jobInfoHeaderModel"]["Berufsbezeichnung"],
"Unternehmen": Jobinfo["jobInfoHeaderModel"]["Name der Firma"],
"Lage": Jobinfo["jobInfoHeaderModel"]["formatierter Standort"],
"Stellenbeschreibung": job_info.get(„bereinigte Stellenbeschreibung“, "")
}

# Funktion zum Scrapen von Jobdetails von Jobseiten und zum Speichern in der Datenbank
def kratzen_und_speichern(API, Jobschlüssel, Cursor):
URL = f"https://www.indeed.com/m/basecamp/viewjob?viewtype=embedded&jk={job_key}"
Antwort = api.get(URL, {'Land': 'UNS'})
if Antwort['Statuscode'] == 200:
# Extrahierter HTML-Inhalt nach dem Dekodieren von Byte-Daten
html_content = Antwort['Körper'].dekodieren('lateinisch1')

# Analysieren Sie den HTML-Code
job = jobseite_html_analysieren(html_Inhalt)

# Jobdetails in der Datenbank speichern
in_Datenbank_speichern(Cursor, Job)

drucken(f"Auftragsdetails zum Auftragsschlüssel gespeichert: {job_key}")

# Anwendungsbeispiel
def Haupt-
# Initialisieren Sie die Datenbank
conn, Cursor = Datenbank initialisieren()

api = CrawlingAPI({'Zeichen': 'IHR_CRAWLBASE_JS_TOKEN'})
job_keys = ["6a45faa5d8d817fa", "ein anderer Jobschlüssel"]

# Jobdetails für jeden Jobschlüssel abrufen und speichern
Aufgaben = [scrape_and_save(API, Jobschlüssel, Cursor) für Jobschlüssel in Jobschlüssel]

# Schließen Sie die Datenbankverbindung
conn.close()

if __name__ == "__hauptsächlich__":
Main()

Dieser Code initialisiert zunächst die Datenbankstruktur und erstellt eine Tabelle mit dem Namen „jobs“, in der Informationen wie Berufsbezeichnungen, Firmennamen, Standorte und Stellenbeschreibungen gespeichert werden. Die initialize_database Funktion initialisiert die SQLite-Datenbank und gibt sowohl die Verbindung als auch den Cursor zurück. Die save_to_database Die Funktion ist für das Einfügen der Auftragsdetails in diese Tabelle zuständig.

Der eigentliche Web Scraping Prozess findet im scrape_and_save Funktion, die einen Jobschlüssel (eine eindeutige Kennung für jede Stellenausschreibung) und einen SQLite-Cursor als Eingabe verwendet. Diese Funktion erstellt die URL für eine bestimmte Stellenausschreibung, sendet eine HTTP-Anfrage an die Indeed-Website, ruft den HTML-Inhalt der Stellenseite ab und analysiert ihn dann mithilfe der parse_job_page_html Funktion. Diese analysierten Daten, einschließlich Berufsbezeichnung, Firmenname, Standort und Stellenbeschreibung, werden dann mithilfe der save_to_database Funktion.

Die main Funktion orchestriert den gesamten Prozess. Sie initialisiert die Datenbankverbindung und Crawling API Instanz, definiert eine Liste der zu scrapenden Jobschlüssel und führt die Scraping- und Speicheraufgaben für jeden Jobschlüssel aus. Sobald alle Jobdetails gescrapt und gespeichert wurden, wird die Datenbankverbindung geschlossen.

Indem Sie diese detaillierten Schritte befolgen, können Sie einen umfassenden Indeed-Job-Scraper in Python erstellen, Stellenangebote scrapen, die Paginierung handhaben, Daten aus Stellenangebotsseiten extrahieren und die Daten zur weiteren Analyse oder Verwendung in einer SQLite-Datenbank speichern.

Optimieren Sie Ihren Indeed Scraper mit Python und Crawlbase

Online-Plattformen stehen für Arbeitssuchende an erster Stelle und bieten ihnen viele Möglichkeiten auf Knopfdruck. Diese Benutzerfreundlichkeit geht jedoch mit der entmutigenden Aufgabe einher, ein Meer an Informationen zu durchforsten. Web Scraping ist ein bahnbrechender Prozess der Datenerfassung, der unsere Strategien zur Arbeitssuche neu gestaltet.

Durch den Einsatz von Web Scraping können wir die Art und Weise unserer Jobsuche revolutionieren. Es automatisiert den mühsamen Prozess des Sammelns und Sortierens von Stellenangeboten aus verschiedenen Portalen. Sie müssen nicht mehr unzählige Stunden damit verbringen, verschiedene Jobbörsen manuell zu durchsuchen. Mit maßgeschneiderten Web Scraping-Skripten können Sie Stellenangebote, die Ihren Präferenzen entsprechen, ganz einfach sammeln, kategorisieren und anzeigen. Das spart Zeit und stellt sicher, dass kein noch so unscheinbares potenzielles Stellenangebot durch die Maschen rutscht.

Unser umfassender Leitfaden beleuchtet die Web Scraping-Funktionen von Crawlbase Crawling API, mit Schwerpunkt auf der Anwendung für die renommierte Jobbörse Indeed. Egal, ob Sie nach einem idealen Job suchen oder ein Technikbegeisterter sind, der Scraping-Techniken erlernen möchte, dieser Python-Leitfaden bietet die Tools zur Automatisierung und Verfeinerung Ihrer Jobsuche. Begleiten Sie uns auf unserer Reise, während wir Ihnen zeigen, wie Web Scraping Ihre Suche nach dem perfekten Job auf Indeed vereinfachen und optimieren kann.

Häufig gestellte Fragen

Ist es möglich, Indeed zu scrapen?

Sie können Stellenausschreibungen von Indeed scrapen, aber das verstößt gegen deren Regeln. Indeed versucht, Scraping zu verhindern und verwendet Dinge wie CAPTCHAs und Beschränkungen, wie oft Sie auf die Website zugreifen können, um automatisiertes Scraping zu verhindern. Wenn Sie diese Regeln brechen, bekommen Sie möglicherweise rechtliche Probleme oder Ihre IP-Adresse wird gesperrt. Anstatt Scraping bietet Indeed APIs oder andere Möglichkeiten, um an ihre Daten für zugelassene Partner zu gelangen, was eine legalere Möglichkeit ist, auf das zuzugreifen, was sie haben.

Wie kann ich Leads aus Indeed extrahieren?

Wenn Sie sich dafür entscheiden, Stellenausschreibungen oder potenzielle Leads von Indeed zu sammeln (auch wenn dies riskant ist), sollten Sie grundsätzlich folgende Schritte unternehmen:

  1. Wählen Sie Ihre Ziel-URLs aus: Finden Sie heraus, von welchen Stellenangeboten oder Suchseiten auf Indeed Sie Daten sammeln möchten.
  2. Sehen Sie sich an, wie die Site aufgebaut ist: Verwenden Sie die Entwicklertools Ihres Browsers, um die HTML-Tags zu finden, die Berufsbezeichnungen, Beschreibungen, Firmennamen und Standorte enthalten. 3. Erstellen Sie ein Programm zum Sammeln von Daten: Verwenden Sie eine Programmiersprache wie Python mit Tools wie BeautifulSoup und Scrapy, um die Informationen aus diesen HTML-Tags zu extrahieren.
  3. Umgang mit CAPTCHAs und Beschränkungen: Überlegen Sie sich Möglichkeiten, CAPTCHAs zu umgehen und Ihre Anfragen zu verlangsamen, damit die Site Sie nicht blockiert.
  4. Bewahren Sie die Informationen auf: Speichern Sie die gesammelten Daten in einer Datenbank oder CSV-Datei, damit Sie später damit arbeiten können.

Was ist der beste Job-Scraper?

Der beste Job Scraper hängt von Ihren spezifischen Anforderungen ab, z. B. von der Plattform, auf die Sie abzielen, und vom Umfang der Datenerfassung. Als umfassende und zuverlässige Lösung ist Crawlbase eine der besten Optionen für Job Scraping.

Crawlbase Crawling API bietet innovative Funktionen wie:

  1. Vielseitige Parameteroptionen: Crawlbase bietet einen umfangreichen Parametersatz, mit dem Entwickler ihre API-Anfragen präzise anpassen können. Parameter wie „Format“, „User_Agent“, „Page_Wait“ und mehr ermöglichen die Anpassung an spezifische Crawling-Anforderungen.
  2. Steuerung des Antwortformats: Entwickler können je nach ihren Präferenzen und Datenverarbeitungsanforderungen zwischen den Antwortformaten JSON und HTML wählen. Diese Flexibilität vereinfacht die Datenextraktion und -bearbeitung.
  3. Handhabung von Cookies und Headern: Durch die Möglichkeit, Cookies und Header mithilfe von Parametern wie „get_cookies“ und „get_headers“ von der ursprünglichen Website abzurufen, können Entwickler auf wertvolle Informationen zugreifen, die für bestimmte Web-Scraping-Aufgaben von entscheidender Bedeutung sein können.
  4. Dynamische Inhaltsverarbeitung: Crawlbase zeichnet sich durch die Verarbeitung dynamischer Inhalte aus und eignet sich daher zum Crawlen von mit JavaScript gerenderten Seiten. Parameter wie „page_wait“ und „ajax_wait“ ermöglichen es Entwicklern, sicherzustellen, dass die API den vollständig gerenderten Inhalt erfasst, auch wenn das Laden einige Zeit in Anspruch nimmt oder AJAX-Anfragen enthält.
  5. IP-Rotation: Crawlbase bietet die Möglichkeit, IP-Adressen zu rotieren, was Anonymität gewährleistet und das Risiko verringert, von Websites blockiert zu werden. Diese Funktion gewährleistet eine höhere Erfolgsquote bei Web-Crawling-Aufgaben.
  6. Geolokalisierungsoptionen: Entwickler können mit dem Parameter „country“ ein Land für geolokalisierte Anfragen angeben. Dies ist insbesondere in Szenarien nützlich, in denen Daten aus bestimmten geografischen Regionen erforderlich sind.
  7. Tor-Netzwerk-Unterstützung: Zum Crawlen von Onion-Websites über das Tor-Netzwerk kann der Parameter „tor_network“ aktiviert werden, wodurch die Privatsphäre und der Zugriff auf Inhalte im Dark Web verbessert werden.
  8. Screenshot-Aufnahme: Mit dem Parameter „Screenshot“ kann die API Screenshots von Webseiten erfassen und so einen visuellen Kontext für die gecrawlten Daten bereitstellen.
  9. Datenscraping mit Scrapern: Crawlbase bietet die Möglichkeit, vordefinierte Daten-Scraper zu verwenden, wodurch die Extraktion spezifischer Informationen aus Webseiten optimiert wird. Dies vereinfacht den Datenabruf für gängige Anwendungsfälle.
  10. Asynchrones Crawlen: In Fällen, in denen asynchrones Crawling erforderlich ist, unterstützt die API den Parameter „async“. Entwickler erhalten eine Anforderungskennung (RID) zum Abrufen gecrawlter Daten aus dem Cloud-Speicher.
  11. Automatisches Parsen: Der Parameter „autoparse“ vereinfacht die Datenextraktion, indem er analysierte Informationen im JSON-Format zurückgibt und so die Notwendigkeit einer umfangreichen Nachbearbeitung von HTML-Inhalten reduziert.