Scraping web per gli annunci di lavoro - Guida definitiva 2024

Pitone, Scraping, 05.01.20235 minuti di lettura

Il Web Scraping per gli annunci di lavoro è una scorciatoia alternativa per chi cerca lavoro per creare un database di offerte di lavoro attuali. Secondo Randstad, la ricerca media di lavoro può durare da cinque a sei mesi, da quando viene presentata la candidatura fino a quando la posizione viene occupata. E se aveste una soluzione in grado di ridurre il vostro carico di lavoro?

Il Web Scraping per gli annunci di lavoro è una scorciatoia alternativa per chi cerca lavoro per creare un database di offerte di lavoro attuali. Secondo Randstad, la ricerca media di lavoro può durare da cinque a sei mesi, da quando si presenta una candidatura fino a quando la posizione viene occupata. E se ci fosse una soluzione in grado di ridurre l'onere di navigare tra tutti i portali di lavoro e di scegliere quello giusto per voi? 

Questo articolo vi accompagnerà in un viaggio che vi spiegherà come effettuare il web scraping per gli annunci di lavoro. Siete sul mercato del lavoro e state cercando di trovare il lavoro migliore. Ma volete giocare in modo più intelligente e non più difficile. Perché non costruire un web scraper che raccolga e analizzi gli annunci di lavoro per voi? Una volta impostato, vi fornirà una grande quantità di dati in un formato ordinato, in modo che non dobbiate controllarli manualmente più volte. Iniziamo.

Che cos'è il Web Scraping per gli annunci di lavoro?

Il web scraping per gli annunci di lavoro è una soluzione che raccoglie automaticamente i dati da più portali di lavoro e riduce il tempo necessario per recuperare i dati da ciascun sito web. Avere a disposizione uno strumento in grado di fornire un database completo di offerte di lavoro semplificherà il vostro compito di molte volte. Tutto ciò che dovete fare è filtrare le offerte che fanno al caso vostro e procedere con il processo di candidatura. 

Siete sul mercato del lavoro e state cercando di trovare il lavoro migliore. Ma volete giocare in modo più intelligente e non più difficile. Perché non costruire un web scraper che raccolga e analizzi gli annunci di lavoro per voi? Una volta impostato, vi fornirà una grande quantità di dati in un formato ordinato, in modo che non dobbiate controllarli manualmente più volte. Iniziamo.

[Disclaimer! Molti siti web possono limitare lo scrapping dei dati dalle loro pagine. Gli utenti possono essere soggetti a problemi legali a seconda di dove e come cercano di estrarre le informazioni. Occorre quindi prestare la massima attenzione quando si consultano siti che ospitano i propri dati. Ad esempio, Facebook, Linked In e Craiglist a volte si lamentano se i dati vengono estratti dalle loro pagine. Quindi, se volete fare scraping, fatelo a vostro rischio e pericolo].

Questo sarà un articolo molto semplice in cui vedremo le basi del web scraping estraendo alcune informazioni utili riguardanti le offerte di lavoro relative a "Data Science" da indeed.com. Scriveremo un programma che aggiornerà le offerte di lavoro più volte manualmente. Alcune librerie utili che ci saranno molto utili durante la costruzione di questo scraper sono "requests" e "BeautifulSoup".

Comprendere l'URL e la struttura della pagina

Per prima cosa, diamo un'occhiata alla pagina di esempio che stiamo per estrarre . 

Il modo in cui l'URL è strutturato è significativo:

  • notare che "q=" inizia la stringa per il campo "cosa" della pagina, separando i termini di ricerca con "+" (ad esempio, la ricerca di posti di lavoro "data+scientist")
  • Quando si specifica il salario, il sistema analizza le virgole nella cifra del salario, quindi l'inizio del salario sarà preceduto da %24 e poi dal numero prima della prima virgola, quindi sarà interrotto da %2C e continuerà con il resto del numero (ad esempio, %2420%2C000 = 20.000 dollari).
  • notare che "&l=" inizia la stringa per la città di interesse, separando i termini di ricerca con "+" se la città è più di una parola (ad esempio, "New+York").
  • notare che "&start=" indica il risultato della ricerca da cui si vuole iniziare (ad esempio, iniziare guardando il 10° risultato)

Questa struttura di URL sarebbe di grande aiuto mentre continuiamo a costruire lo scraper e a raccogliere dati da più pagine. 

Chrome può esaminare la struttura HTML della pagina facendo clic con il tasto destro del mouse e utilizzando l'opzione ispeziona elemento. Sulla destra apparirà un menu che mostrerà anche i tag degli elementi annidati e, quando si posiziona il cursore su tali elementi, si evidenzierà quella porzione di schermo.  

Per questo articolo, suppongo che conosciate le basi dell'HTML, come i tag, i div e così via, ma fortunatamente non è necessario sapere tutto. È sufficiente comprendere la struttura della pagina e la gerarchia dei diversi componenti.

Come iniziare con il raschietto

Ora abbiamo analizzato la struttura della pagina. Questo ci aiuterà a costruire il codice in base a queste informazioni per estrarre i dati di nostra scelta. Cominciamo innanzitutto importando le nostre librerie. Si noti che qui stiamo importando anche "time", che sarà utile per non sovraccaricare il server del sito durante lo scraping delle informazioni.

importare le richieste
importare bs4
da bs4 importa BeautifulSoup
importare pandas come pd
importare tempo

Per prima cosa, si punterà sulla singola pagina per prelevare ogni informazione desiderata,

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#effettuare una richiesta dell'URL indicato sopra:
page = requests.get(URL)
#specificare il formato desiderato di "page" usando il parser html - questo permette a python di leggere i vari componenti della pagina, invece di trattarla come una lunga stringa.
soup = BeautifulSoup(page.text, "html.parser")
#stampare la zuppa in un formato ad albero più strutturato che facilita la lettura
print(soup.prettify())

L'uso di prettify rende più facile avere una visione d'insieme della codifica HTML della pagina e fornisce un output come questo,

 Ora tutte le informazioni sulla pagina di interesse si trovano nella variabile "soup". Dobbiamo scavare di più nel codice per iterare i vari tag e sotto-tag per catturare le informazioni richieste.

Ottenere gli elementi di base dei dati

I cinque punti chiave per ogni annuncio di lavoro sono,

Titolo del lavoro.Nome dell'azienda.Sede.Stipendio.Sommario del lavoro.

Se diamo un'occhiata alla pagina, ci sono 15 annunci di lavoro. Pertanto, anche il nostro codice dovrebbe generare 15 elementi diversi. Tuttavia, se il codice fornisce un numero inferiore di elementi, possiamo fare riferimento alla pagina e vedere cosa non viene catturato.

Ottenere il titolo del lavoro

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.

Riassumendo, la funzione che vedremo prevede le seguenti tre fasi,

Pulling out all the <div> tags with class including “row”.Identifying <a> tags with attribute “data-tn-element”:”jobTitle”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)

Questo codice produrrà un risultato simile a questo,

Ottenere il nome della società

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

Utilizzeremo le istruzioni if/else per estrarre le informazioni sulle società da ciascuno di questi luoghi. Per rimuovere gli spazi bianchi intorno ai nomi delle società quando vengono prodotti, useremo input.strip() alla fine.

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)

Posizione

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)

Ottenere lo stipendio

La retribuzione è la parte più difficile da estrarre dagli annunci di lavoro. La maggior parte degli annunci non pubblica affatto le informazioni sullo stipendio, mentre per quelli che lo fanno, ci possono essere più posti in cui estrarle. Dobbiamo quindi scrivere un codice in grado di raccogliere più stipendi da più parti e, se non viene trovato alcuno stipendio, dobbiamo creare un valore segnaposto "Nothing Found" per tutti i lavori che non contengono lo stipendio. 

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)

Ottenere il riepilogo del lavoro

Il lavoro finale consiste nell'ottenere il riepilogo del lavoro. Tuttavia, non è possibile ottenere il riepilogo delle mansioni per ogni particolare posizione perché non è incluso nell'HTML di una determinata pagina di Indeed. Possiamo ottenere alcune informazioni su ogni lavoro da ciò che viene fornito. A tale scopo, possiamo utilizzare 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.

Domande frequenti

Domande frequenti:

1. Perché è necessario raccogliere i dettagli di un lavoro?
Ci sono abbastanza portali di lavoro che possono notificarvi le offerte di lavoro che corrispondono al vostro profilo. Tuttavia, una soluzione di job scraping vi permetterà di ottenere un elenco completo di offerte di lavoro e la relativa descrizione in un pratico database. Questo vi permetterà di avere una visione migliore di tutte le opportunità di lavoro in un unico posto.
2. In che modo un proxy può aiutare a raccogliere i dettagli di un lavoro?
Lo scraping sul web presenta di solito alcune sfide, come i blocchi IP, i geoblocchi e la velocità limitata. Anche lo scraping di lavori da portali di lavoro presenta tali problemi. Per aggirare tutti questi problemi, gli indirizzi proxy possono aiutarvi con gli indirizzi IP della località richiesta e garantire l'anonimato.
3. Quali sono le librerie python necessarie per analizzare i dettagli del lavoro?
Requests, BeautifulSoup e Pandas sono librerie python piuttosto comuni per lo scraping di dati relativi al lavoro dai siti web. La libreria Request è la libreria python più comunemente usata per inviare richieste al web, mentre BeautifulSoup è responsabile dell'analisi dei dati e la libreria Pandas aiuta nelle operazioni di struttura dei dati.

Articoli correlati

Come eseguire lo scraping di Twitter con Python

Come eseguire lo scraping di Instagram con Python

Come raschiare Reddit con Python

Conclusione

In questo articolo abbiamo visto che cos'è il web scraping e come può essere utile nella nostra vita quotidiana, facendo un esempio pratico di scraping di dati sulle offerte di lavoro dalle pagine web di Indeed. Si noti che i risultati ottenuti potrebbero essere diversi da questi, poiché le pagine sono dinamiche e le informazioni cambiano continuamente nel tempo. 

Il Web Scraping è una tecnica incredibile se eseguita correttamente e in base alle proprie esigenze. Abbiamo visto i cinque aspetti importanti di ogni annuncio di lavoro e come estrarli. Quando proverete questo codice per conto vostro, otterrete i dati di scraping degli annunci di lavoro, senza doverli cercare manualmente, il che è sorprendente. La stessa tecnica può essere applicata anche ad altre pagine web, ma la loro struttura potrebbe essere diversa. Pertanto, è necessario ottimizzare il codice in base a questo. Ma tutte le nozioni di base sono state trattate in questo articolo, quindi non ci sarà alcuna difficoltà a eseguire lo scraping anche di altre pagine.

Se siete alla ricerca di servizi proxy, non dimenticate di guardare a ProxyScrapeproxy residenziali e premium.