ciemne logo proxyscrape

Web Scraping For Job Postings – An Ultimate 2024 Guide

Python, Scraping, Jan-04-20235 minut czytania
Web Scraping dla ofert pracy jest alternatywnym skrótem dla osób poszukujących pracy w celu stworzenia bazy danych aktualnych ofert pracy. Randstad twierdzi, że przeciętne poszukiwanie pracy może trwać od pięciu do sześciu miesięcy, od momentu złożenia aplikacji do obsadzenia stanowiska. A co, jeśli masz rozwiązanie, które może zmniejszyć obciążenie związane z przeglądaniem wszystkich portali pracy i wybieraniem tego, który Ci odpowiada? 

Ten artykuł zabierze Cię w podróż wyjaśniającą, jak skrobać strony internetowe w poszukiwaniu ofert pracy. Jesteś na rynku pracy i próbujesz znaleźć najlepszą pracę. Ale chcesz grać mądrzej, a nie trudniej. Dlaczego nie zbudować skrobaka internetowego do zbierania i analizowania ofert pracy. Po skonfigurowaniu go, dostarczy ci bogactwa danych w ładnym, uporządkowanym formacie, dzięki czemu nie będziesz musiał sprawdzać ich ręcznie raz za razem. Zaczynajmy.

Co to jest Web Scraping dla ogłoszeń o pracę?

Web scraping dla ofert pracy to rozwiązanie, które automatycznie zbiera dane z wielu portali pracy i skraca czas pobierania danych z każdej strony internetowej. Posiadanie takiego narzędzia, które może zapewnić pełną bazę danych ofert pracy, wielokrotnie uprości zadanie. Wszystko, co musisz zrobić, to przefiltrować te, które będą Ci odpowiadać i przejść do procesu aplikowania. 

Jesteś na rynku pracy i próbujesz znaleźć najlepszą pracę. Ale chcesz grać mądrzej, a nie trudniej. Dlaczego nie zbudować skrobaka internetowego, który będzie zbierał i analizował oferty pracy? Po skonfigurowaniu go, dostarczy ci bogactwa danych w ładnym, uporządkowanym formacie, dzięki czemu nie będziesz musiał sprawdzać ich ręcznie raz za razem. Zaczynajmy.

[Zastrzeżenie! Wiele stron internetowych może ograniczać pobieranie danych ze swoich stron. Użytkownicy mogą podlegać kwestiom prawnym w zależności od tego, gdzie i w jaki sposób próbują wyodrębnić informacje. Należy więc zachować szczególną ostrożność, przeglądając strony, które przechowują ich dane. Na przykład Facebook, LinkedIn i Craiglist czasami mają coś przeciwko, jeśli dane są pobierane z ich stron. Jeśli więc chcesz skrobać, rób to na własne ryzyko].

Będzie to bardzo podstawowy artykuł, w którym zobaczymy podstawy skrobania stron internetowych, wyodrębniając przydatne informacje dotyczące ofert pracy związanych z "Data Science" z indeed.com. Będziemy pisać niesamowity program, który aktualizuje oferty pracy wiele razy ręcznie. Niektóre przydatne biblioteki, które będą bardzo przydatne podczas tworzenia tego scrapera to "requests" i "BeautifulSoup".

Zrozumienie adresu URL i struktury strony

Najpierw spójrzmy na przykładową stronę, którą zamierzamy wyodrębnić . 

Sposób struktury adresu URL jest istotny:

  • uwaga "q=" rozpoczyna ciąg dla pola "co" na stronie, oddzielając wyszukiwane hasła znakiem "+" (np. wyszukiwanie ofert pracy "data+scientist").
  • podczas określania wynagrodzenia, będzie analizować przecinki w kwocie wynagrodzenia, więc początek wynagrodzenia zostanie poprzedzony %24, a następnie liczbą przed pierwszym przecinkiem, następnie zostanie przerwany przez %2C i będzie kontynuowany z resztą liczby (tj. %2420%2C000 = $20,000)
  • Uwaga: "&l=" rozpoczyna ciąg dla interesującego miasta, oddzielając wyszukiwane hasła znakiem "+", jeśli miasto składa się z więcej niż jednego słowa (np. "New+York").
  • Uwaga "&start=" wskazuje wynik wyszukiwania, od którego chcesz zacząć (np. zacznij od 10. wyniku).

Taka struktura adresów URL byłaby niezwykle pomocna podczas dalszego tworzenia scrapera i gromadzenia danych z wielu stron. 

Chrome może zbadać strukturę HTML strony, klikając ją prawym przyciskiem myszy i używając opcji inspect element. Po prawej stronie pojawi się menu, które pokaże również zagnieżdżone znaczniki elementów, a po umieszczeniu kursora na tych elementach podświetli tę część ekranu.  

W tym artykule zakładam, że znasz podstawy HTML, takie jak znaczniki, divy itp., ale na szczęście nie musisz wiedzieć wszystkiego. Wystarczy zrozumieć strukturę strony i hierarchię różnych komponentów.

Pierwsze kroki ze skrobaczką

Teraz przeanalizowaliśmy strukturę strony. Pomoże nam to zbudować kod zgodnie z tymi informacjami, aby wyciągnąć wybrane przez nas dane. Zacznijmy najpierw od zaimportowania naszych bibliotek. Zauważ, że importujemy tutaj również "czas", co będzie pomocne, aby nie przeciążać serwera witryny podczas skrobania informacji.

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

Najpierw skierujemy pojedynczą stronę, aby wycofać każdy element informacji, który chcemy,

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#wykonanie żądania podanego powyżej adresu URL:
page = requests.get(URL)
#określenie pożądanego formatu "strony" przy użyciu parsera html - pozwala to Pythonowi odczytać różne komponenty strony, zamiast traktować ją jako jeden długi ciąg.
soup = BeautifulSoup(page.text, "html.parser")
# drukowanie zupy w bardziej uporządkowanym formacie drzewa, który ułatwia czytanie
print(soup.prettify())

Korzystanie z funkcji prettify ułatwia przegląd kodowania HTML strony i zapewnia takie dane wyjściowe,

 Teraz wszystkie informacje o interesującej nas stronie znajdują się w zmiennej "soup". Musimy bardziej zagłębić się w kod, aby iterować przez różne tagi i pod-tagi w celu przechwycenia wymaganych informacji.

Uzyskiwanie podstawowych elementów danych

Pięć kluczowych punktów dla każdego ogłoszenia o pracę to,

  1. Tytuł stanowiska.
  2. Nazwa firmy.
  3. Lokalizacja.
  4. Wynagrodzenie.
  5. Podsumowanie stanowiska.

Jeśli spojrzymy na stronę, jest tam 15 ofert pracy. Dlatego nasz kod powinien również wygenerować 15 różnych pozycji. Jeśli jednak kod zapewnia mniej niż to, możemy odnieść się do strony i zobaczyć, co nie zostało przechwycone.

Uzyskanie nazwy stanowiska

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.

Podsumowując, funkcja, którą zobaczymy, obejmuje następujące trzy kroki,

  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)

Ten kod da następujący wynik,

Uzyskanie nazwy firmy

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”.

Będziemy używać instrukcji if/else, aby wyodrębnić informacje o firmie z każdego z tych miejsc. Aby usunąć białe spacje wokół nazw firm, gdy są one wyprowadzane, użyjemy inputting.strip() na końcu.

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)

Uzyskiwanie lokalizacji

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)

Otrzymywanie wynagrodzenia

Wynagrodzenie jest najtrudniejszą częścią do wyodrębnienia z ofert pracy. Większość ofert w ogóle nie publikuje informacji o wynagrodzeniu, podczas gdy inne, które to robią, mogą mieć wiele miejsc, w których można je wybrać. Musimy więc napisać kod, który może pobrać wiele wynagrodzeń z wielu miejsc, a jeśli nie zostanie znalezione żadne wynagrodzenie, musimy utworzyć wartość zastępczą "Nic nie znaleziono" dla wszystkich ofert pracy, które nie zawierają wynagrodzenia. 

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)

Podsumowanie pracy

Ostatnim zadaniem jest uzyskanie podsumowania pracy. Nie jest jednak możliwe uzyskanie podsumowań zadań dla każdego konkretnego stanowiska, ponieważ nie są one zawarte w kodzie HTML z danej strony Indeed. Możemy uzyskać pewne informacje o każdym stanowisku z tego, co zostało dostarczone. W tym celu możemy użyć Selenium.

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.

Często zadawane pytania

1. Why is it necessary to scrape job details?
Istnieje wystarczająco dużo portali z ofertami pracy, które mogą powiadamiać o ofertach pasujących do profilu kandydata. Mimo to, posiadanie rozwiązania do skrobania ofert pracy pozwoli ci uzyskać pełną listę ofert pracy wraz z opisem w postaci podręcznej bazy danych. Pozwoli to na lepszy wgląd we wszystkie oferty pracy w jednym miejscu.
2. How can a proxy help in scraping job details?
Skrobanie stron internetowych zwykle wiąże się z pewnymi wyzwaniami, takimi jak blokady IP, blokady geograficzne i ograniczona prędkość. Skrobanie ofert pracy z portali pracy również wiąże się z takimi wyzwaniami. Aby ominąć wszystkie te problemy, adresy proxy mogą pomóc w uzyskaniu adresów IP wymaganej lokalizacji i zapewnić anonimowość
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.
Powiązane artykuły

Podsumowanie

W tym artykule pokazaliśmy, czym jest web scraping i jak może być pomocny w naszym codziennym życiu na praktycznym przykładzie pobierania danych o ofertach pracy ze stron internetowych Indeed. Należy pamiętać, że otrzymane wyniki mogą różnić się od tych, ponieważ strony są dynamiczne, więc informacje zmieniają się w czasie. 

Web Scraping to niesamowita technika, jeśli jest wykonywana prawidłowo i zgodnie z wymaganiami. Zapoznaliśmy się z pięcioma ważnymi aspektami każdej oferty pracy i sposobami ich wyodrębniania. Po samodzielnym wypróbowaniu tego kodu będziesz mieć zeskrobane dane z ofert pracy i nie będziesz musiał ręcznie wyszukiwać ofert pracy, co jest niesamowite. Tę samą technikę można również zastosować do innych stron internetowych, ale ich struktura może się różnić. W związku z tym należy zoptymalizować swój kod pod tym kątem. Ale wszystkie podstawy zostały omówione w tym artykule, więc nie będzie żadnych trudności w skrobaniu innych stron.

Jeśli szukasz usług proxy, nie zapomnij spojrzeć na ProxyScrapeproxy dla użytkowników indywidualnych i proxy premium.