dunkel proxyscrape logo

Web Scraping For Job Postings – An Ultimate 2024 Guide

Python, Scraping, Jan-04-20235 Min. gelesen
Web Scraping für Stellenausschreibungen ist eine alternative Abkürzung für Arbeitsuchende, um eine Datenbank mit aktuellen Stellenangeboten zu erstellen. Nach Angaben von Randstad kann die durchschnittliche Stellensuche fünf bis sechs Monate dauern, vom Zeitpunkt der Bewerbung bis zur Besetzung einer Stelle. Was wäre, wenn es eine Lösung gäbe, die Ihnen die Mühe abnimmt, durch alle Jobportale zu surfen und das richtige auszuwählen, das zu Ihnen passt? 

Dieser Artikel nimmt Sie mit auf eine Reise und erklärt, wie man Web Scraping für Stellenausschreibungen durchführt. Sie befinden sich also auf dem Arbeitsmarkt und versuchen, den besten Job zu finden. Aber Sie wollen schlauer und nicht härter vorgehen. Warum bauen Sie nicht einen Web Scraper, der für Sie Stellenanzeigen sammelt und analysiert. Sobald Sie ihn eingerichtet haben, wird er Ihnen eine Fülle von Daten in einem schönen, aufgeräumten Format zur Verfügung stellen, so dass Sie sie nicht immer wieder manuell überprüfen müssen. Fangen wir an.

Was ist Web Scraping für Stellenausschreibungen?

Web Scraping für Stellenausschreibungen ist die Lösung, die automatisch Daten von mehreren Stellenportalen sammelt und Ihre Zeit für das Abrufen von Daten von jeder Website reduziert. Ein solches Tool, das Ihnen eine vollständige Datenbank mit offenen Stellen zur Verfügung stellt, vereinfacht Ihre Aufgabe um ein Vielfaches. Sie müssen nur noch die für Sie passenden Stellen herausfiltern und mit dem Bewerbungsprozess fortfahren. 

Sie befinden sich also auf dem Arbeitsmarkt und versuchen, die beste Stelle zu finden. Aber Sie wollen klüger und nicht härter vorgehen. Warum bauen Sie nicht einen Web Scraper, der Stellenanzeigen für Sie sammelt und analysiert? Sobald Sie ihn eingerichtet haben, wird er Ihnen eine Fülle von Daten in einem schönen, aufgeräumten Format zur Verfügung stellen, so dass Sie sie nicht immer wieder manuell überprüfen müssen. Fangen wir an.

[Haftungsausschluss! Viele Websites können das Scrapen von Daten von ihren Seiten einschränken. Je nachdem, wo und wie die Nutzer versuchen, die Informationen zu extrahieren, können sie sich rechtlichen Problemen ausgesetzt sehen. Man muss also äußerst vorsichtig sein, wenn man sich Websites ansieht, die ihre Daten beherbergen. Facebook, Linked In und Craiglist zum Beispiel haben manchmal etwas dagegen, wenn Daten von ihren Seiten abgegriffen werden. Wenn Sie also scrapen wollen, tun Sie das auf eigene Gefahr].

Dies wird ein sehr grundlegender Artikel sein, in dem wir die Grundlagen des Web Scraping sehen werden, indem wir einige hilfreiche Informationen über Jobs im Zusammenhang mit "Data Science" von indeed.com extrahieren. Wir werden ein erstaunliches Programm schreiben, das die Jobs mehrmals manuell aktualisiert. Einige nützliche Bibliotheken, die bei der Erstellung dieses Scrapers sehr nützlich sein werden, sind "requests" und "BeautifulSoup".

Verstehen der URL und der Seitenstruktur

Werfen wir zunächst einen Blick auf die Beispielseite, die wir in der Tat extrahieren werden. 

Die Art und Weise, wie die URL strukturiert ist, ist von Bedeutung:

  • Hinweis: "q=" beginnt die Zeichenfolge für das Feld "Was" auf der Seite, wobei die Suchbegriffe mit "+" getrennt werden (z. B. Suche nach "data+scientist"-Stellen)
  • Bei der Angabe des Gehalts wird die Gehaltsangabe nach Kommas gegliedert, d. h. dem Anfang des Gehalts wird %24 vorangestellt und dann die Zahl vor dem ersten Komma, dann wird sie durch %2C unterbrochen und mit dem Rest der Zahl fortgesetzt (z. B. %2420%2C000 = $20.000)
  • Hinweis: "&l=" beginnt die Zeichenfolge für die gewünschte Stadt, wobei die Suchbegriffe mit "+" getrennt werden, wenn die Stadt aus mehr als einem Wort besteht (z. B. "New+York").
  • notieren Sie mit "&start=" das Suchergebnis, mit dem Sie beginnen möchten (d. h. Sie beginnen mit dem 10. Ergebnis)

Diese URL-Struktur wäre eine große Hilfe, wenn wir den Scraper weiter aufbauen und Daten von mehreren Seiten sammeln. 

Chrome kann die HTML-Struktur der Seite untersuchen, indem es mit der rechten Maustaste darauf klickt und die Option "Element inspizieren" verwendet. Auf der rechten Seite erscheint ein Menü, das auch die Tags der verschachtelten Elemente anzeigt, und wenn Sie den Cursor auf diese Elemente setzen, wird dieser Teil des Bildschirms hervorgehoben.  

Für diesen Artikel setze ich voraus, dass Sie die Grundlagen von HTML wie Tags, Divs usw. kennen, aber zum Glück müssen Sie nicht alles wissen. Sie müssen nur die Seitenstruktur und die Hierarchie der verschiedenen Komponenten verstehen.

Erste Schritte mit dem Scraper

Jetzt haben wir die Struktur der Seite analysiert. Dies wird uns helfen, den Code entsprechend dieser Informationen zu erstellen, um die Daten unserer Wahl herauszuziehen. Beginnen wir damit, unsere Bibliotheken zu importieren. Beachten Sie, dass wir hier auch "time" importieren, was hilfreich sein wird, um den Server der Website beim Abrufen von Informationen nicht zu überlasten.

Anfragen importieren 
bs4importieren 
von bs4 importieren BeautifulSoup
importiere pandas als pd
importiere Zeit

Wir werden zunächst die einzelne Seite anvisieren, um jede gewünschte Information zu entnehmen,

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#Durchführen einer Abfrage der oben angegebenen URL:
page = requests.get(URL)
#Angabe des gewünschten Formats von "page" unter Verwendung des html-Parsers - dies ermöglicht Python, die verschiedenen Komponenten der Seite zu lesen, anstatt sie als einen langen String zu behandeln.
soup = BeautifulSoup(page.text, "html.parser")
#Drucken der Suppe in einem besser strukturierten Baumformat, das das Lesen erleichtert
print(soup.prettify())

Die Verwendung von prettify erleichtert den Überblick über die HTML-Codierung der Seite und liefert eine Ausgabe wie diese,

 Jetzt befinden sich alle Informationen über die Seite, die uns interessiert, in unserer Variablen "soup". Wir müssen mehr in den Code eindringen, um die verschiedenen Tags und Unter-Tags zu durchlaufen, um die erforderlichen Informationen zu erfassen.

Grundlegende Elemente von Daten erhalten

Die fünf wichtigsten Punkte für jede Stellenausschreibung sind,

  1. Berufsbezeichnung.
  2. Name des Unternehmens.
  3. Standort.
  4. Gehalt.
  5. Zusammenfassung der Stelle.

Wenn wir uns die Seite ansehen, gibt es 15 Stellenausschreibungen. Daher sollte unser Code auch 15 verschiedene Elemente erzeugen. Wenn der Code jedoch weniger als diese Zahl liefert, können wir auf die Seite zurückgreifen und sehen, was nicht erfasst wird.

Jobtitel erhalten

As can be seen, the entirety of each job posting is under <div> tags, with an attribute “class” = “row result.”

Further, we could also see that job titles are under <a> tags, with the attribute “title = (title)”. One can see the value of the tag’s attribute with tag[“attribute”], so I can use it to find each posting’s job title.

Zusammenfassend lässt sich sagen, dass die Funktion, die wir sehen werden, die folgenden drei Schritte umfasst,

  1. Pulling out all the <div> tags with class including “row”.
  2. Identifying <a> tags with attribute “data-tn-element”:”jobTitle”
  3. For each of these <a> tags, find attribute values “title”
def extract_job_title_from_result(soup): 
  jobs = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    for a in div.find_all(name="a", attrs={"data-tn-element":"jobTitle"}):
      jobs.append(a["title"])
  return(jobs)
extract_job_title_from_result(soup)

Dieser Code ergibt eine Ausgabe wie diese,

Firmenname erhalten

Getting company names can be a bit tricky because most of them are appearing in <span> tags, with “class”:” company”.  They are also housed in <span> tags with “class”:” result-link-source”.

Wir werden if/else-Anweisungen verwenden, um die Unternehmensinformationen von jeder dieser Stellen zu extrahieren. Um die Leerzeichen um die Firmennamen bei der Ausgabe zu entfernen, werden wir inputting.strip() am Ende verwenden.

def extract_company_from_result(soup): 
 companies = []
 for div in soup.find_all(name="div", attrs={"class":"row"}):
   company = div.find_all(name="span", attrs={"class":"company"})
   if len(company) &gt; 0:
    for b in company:
     companies.append(b.text.strip())
   else:
    sec_try = div.find_all(name="span", attrs={"class":"result-link-source"})
    for span in sec_try:
      companies.append(span.text.strip())
 return(companies)
 
extract_company_from_result(soup)

Standortbestimmung

Locations are located under the <span> tags. Span tags are sometimes nested within each other, such that the location text may sometimes be within “class”:”location” attributes, or nested in “itemprop”:”addressLocality”. However a simple for loop can examine all span tags for text and retrieve the necessary information.

def extract_location_from_result(soup): 
  locations = []
  spans = soup.findAll('span', attrs={'class': 'location'})
  for span in spans:
    locations.append(span.text)
  return(locations)
extract_location_from_result(soup)

Gehalt bekommen

Das Gehalt ist der schwierigste Teil, der aus Stellenausschreibungen zu extrahieren ist. In den meisten Stellenausschreibungen werden überhaupt keine Gehaltsangaben veröffentlicht, während es bei anderen Stellenausschreibungen mehrere Stellen gibt, an denen das Gehalt abgefragt werden kann. Wir müssen also einen Code schreiben, der mehrere Gehälter von mehreren Stellen abrufen kann, und wenn kein Gehalt gefunden wird, müssen wir einen Platzhalterwert "Nichts gefunden" für alle Stellen erstellen, die kein Gehalt enthalten. 

Some salaries are under <nobr> tags, while others are under <div> tags, “class”:”sjcl” and are under separate div tags with no attributes. Try/except statement can be helpful while extracting this information. 

def extract_salary_from_result(soup): 
  salaries = []
  for div in soup.find_all(name="div", attrs={"class":"row"}):
    try:
      salaries.append(div.find('nobr').text)
    except:
      try:
        div_two = div.find(name="div", attrs={"class":"sjcl"})
        div_three = div_two.find("div")
        salaries.append(div_three.text.strip())
      except:
        salaries.append("Nothing_found")
  return(salaries)
extract_salary_from_result(soup)

Jobübersicht erhalten

Die letzte Aufgabe besteht darin, die Stellenzusammenfassung zu erhalten. Es ist jedoch nicht möglich, die Zusammenfassungen für jede einzelne Stelle zu erhalten, da sie nicht im HTML-Code einer bestimmten Indeed-Seite enthalten sind. Wir können jedoch einige Informationen über jede Stelle aus den zur Verfügung gestellten Informationen erhalten. Zu diesem Zweck können wir Selenium verwenden.

But let’s first try this using python. Summaries are located under <span> tags. Span tags are nested within each other such that the location text is within “class”:” location” tags or nested in “itemprop”:” adressLocality”. However, using a simple for loop can examine all span tags for text to retrieve the necessary information.

Häufig gestellte Fragen

1. Why is it necessary to scrape job details?
Es gibt genügend Jobportale, die Sie über die Jobs informieren können, die Ihrem Profil entsprechen. Mit einer Job-Scraping-Lösung erhalten Sie jedoch eine vollständige Liste von Stellen und deren Beschreibung in einer praktischen Datenbank. So haben Sie einen besseren Überblick über alle Stellenangebote an einem Ort.
2. How can a proxy help in scraping job details?
Beim Web-Scraping gibt es in der Regel bestimmte Probleme wie IP-Sperren, Geoblocks und begrenzte Geschwindigkeit. Auch das Scraping von Aufträgen aus Jobportalen ist mit solchen Problemen verbunden. Um all diese Probleme zu umgehen, können Proxy-Adressen Ihnen mit IP-Adressen des gewünschten Standorts helfen und Anonymität gewährleisten
3. What are the python libraries required to scrape job details?
Requests, BeautifulSoup, and Pandas are quite common python libraries to scrape job-related data from websites. Request library is the most common python library used to send web requests, while BeautifulSoup is responsible for parsing data, and Pandas library will help with the data structure operations.
Verwandte Artikel

Einpacken

In diesem Artikel haben wir gesehen, was Web Scraping ist und wie es in unserem täglichen Leben hilfreich sein kann, indem wir ein praktisches Beispiel für das Scraping von Jobdaten von den Webseiten von Indeed genommen haben. Bitte beachten Sie, dass sich die Ergebnisse, die Sie erhalten, von diesen unterscheiden können, da die Seiten dynamisch sind und sich die Informationen mit der Zeit ändern. 

Web Scraping ist eine unglaubliche Technik, wenn sie richtig und entsprechend Ihren Anforderungen durchgeführt wird. Wir haben uns die fünf wichtigsten Aspekte jeder Stellenausschreibung angesehen und wie man sie extrahiert. Wenn Sie diesen Code selbst ausprobieren, werden Sie Daten von Stellenausschreibungen gescraped haben und müssen nicht mehr manuell nach den Stellen suchen, was erstaunlich ist. Die gleiche Technik kann auch auf andere Webseiten angewendet werden, aber deren Struktur kann sich unterscheiden. Daher muss man seinen Code entsprechend optimieren. Aber alle Grundlagen werden in diesem Artikel behandelt, so dass es keine Schwierigkeiten geben wird, auch andere Seiten zu scrapen.

Wenn Sie auf der Suche nach Proxy-Diensten sind, sollten Sie nicht vergessen, sich folgende Angebote anzusehen ProxyScrape Wohn- und Premium-Proxys.