Web Scraping para anúncios de emprego - Guia definitivo 2024

Python, Scraping, Mar-06-20245 minutos de leitura

O site Scraping para anúncios de emprego é um atalho alternativo para os candidatos a emprego criarem um banco de dados de vagas atuais. A Randstad diz que a busca de emprego média pode durar de cinco a seis meses, desde o momento em que uma candidatura é feita até o preenchimento da vaga. E se você tiver uma solução que possa reduzir sua carga?

O site Scraping para anúncios de emprego é um atalho alternativo para os candidatos a emprego criarem um banco de dados de vagas atuais. A Randstad afirma que a busca média de emprego pode durar de cinco a seis meses, desde o momento em que uma candidatura é feita até o preenchimento da vaga. E se você tiver uma solução que possa reduzir o fardo de navegar por todos os portais de emprego e escolher o mais adequado para você? 

Este artigo o levará a uma viagem que explicará como acessar a Web scraping para anúncios de emprego. Então, você está no mercado de trabalho e tentando encontrar o melhor emprego. Mas você quer jogar de forma mais inteligente e não mais difícil. Por que não criar um raspador da Web para coletar e analisar anúncios de emprego para você? Depois de configurado, ele fornecerá uma grande quantidade de dados em um formato bem organizado, para que você não precise verificá-los manualmente várias vezes. Vamos começar.

O que é o site Scraping para anúncios de emprego?

A Web scraping para anúncios de emprego é a solução que coleta automaticamente dados de vários portais de emprego e reduz o tempo gasto na obtenção de dados de cada site. Ter uma ferramenta como essa, que pode fornecer um banco de dados completo de vagas de emprego, simplificará sua tarefa várias vezes. Tudo o que você precisa fazer é filtrar o que lhe convém e prosseguir com o processo de candidatura. 

Então, você está no mercado de trabalho e tentando encontrar o melhor emprego. Mas você quer jogar de forma mais inteligente e não mais difícil. Por que não criar um raspador da Web para coletar e analisar anúncios de emprego para você? Depois de configurado, ele fornecerá uma grande quantidade de dados em um formato bem organizado, para que você não precise verificá-los manualmente várias vezes. Vamos começar.

[Isenção de responsabilidade! Muitos sites podem restringir a extração de dados de suas páginas. Os usuários podem estar sujeitos a problemas legais, dependendo de onde e como tentarem extrair as informações. Portanto, é preciso ser extremamente cuidadoso ao consultar sites que armazenam seus dados. Por exemplo, o Facebook, o Linked In e o Craiglist às vezes se importam se os dados forem extraídos de suas páginas. Portanto, se você quiser acessar scrape, scrape por sua própria conta e risco].

Este será um artigo muito básico no qual veremos os fundamentos da Web scraping extraindo algumas informações úteis sobre empregos relacionados à "Ciência de dados" do site indeed.com. Escreveremos um programa incrível que atualiza as vagas várias vezes manualmente. Algumas bibliotecas úteis que serão muito úteis na criação desse coletor de dados são "requests" e "BeautifulSoup".

Entendendo o URL e a estrutura da página

Primeiro, vamos dar uma olhada na página de amostra que vamos extrair de fato

A forma como o URL é estruturado é importante:

  • Observe que "q=" inicia a cadeia de caracteres do campo "what" (o que) na página, separando os termos de pesquisa com "+" (ou seja, pesquisar empregos de "data+scientist" (cientista de dados))
  • Ao especificar o salário, ele analisará as vírgulas no valor do salário, de modo que o início do salário será precedido por %24 e, em seguida, o número antes da primeira vírgula, que será interrompido por %2C e continuará com o restante do número (ou seja, %2420%2C000 = $20.000)
  • observe que "&l=" inicia a cadeia de caracteres para a cidade de interesse, separando os termos de pesquisa com "+" se a cidade tiver mais de uma palavra (ou seja, "New+York").
  • observe que "&start=" indica o resultado da pesquisa onde você deseja começar (ou seja, comece olhando o 10º resultado)

Essa estrutura de URL seria de grande ajuda à medida que continuássemos a desenvolver o coletor de dados e a reunir dados de várias páginas. 

O Chrome pode examinar a estrutura HTML da página clicando com o botão direito do mouse sobre ela e usando a opção inspecionar elemento. Um menu aparecerá à direita e também mostrará as tags de elementos aninhados e, quando você colocar o cursor sobre esses elementos, ele destacará essa parte da tela.  

Para este artigo, suponho que você saiba o básico sobre HTML, como tags, divs etc., mas, felizmente, não é necessário saber tudo. Você só precisa entender a estrutura da página e a hierarquia dos diferentes componentes.

Primeiros passos com o Scraper

Agora analisamos a estrutura da página. Isso nos ajudará a criar código de acordo com essas informações para extrair os dados de nossa escolha. Vamos começar importando nossas bibliotecas. Observe que aqui também estamos importando "time", o que será útil para não sobrecarregar o servidor do site quando scraping informações.

importar solicitações
importar bs4
from bs4 import BeautifulSoup
importar pandas como pd
import time

Primeiro, direcionaremos a página única para retirar cada informação que desejamos,

URL = "https://www.indeed.com/jobs?q=data+scientist+%2420%2C000&l=New+York&start=10"
#realização de uma solicitação do URL indicado acima:
page = requests.get(URL)
#Especificando o formato desejado de "page" usando o analisador de html - isso permite que o python leia os vários componentes da página, em vez de tratá-la como uma cadeia longa.
soup = BeautifulSoup(page.text, "html.parser")
#Imprimir a sopa em um formato de árvore mais estruturado que facilita a leitura
print(soup.prettify())

O uso do prettify facilita a visão geral da codificação HTML da página e fornece resultados como este,

 Agora, todas as informações sobre nossa página de interesse estão em nossa variável "soup". Temos que nos aprofundar mais no código para iterar por várias tags e subtags para capturar as informações necessárias.

Obtenção de elementos básicos de dados

Os cinco pontos principais para cada anúncio de emprego são,

Cargo.Nome da empresa.Localização.Salário.Resumo do cargo.

Se dermos uma olhada na página, há 15 ofertas de emprego. Portanto, nosso código também deve gerar 15 itens diferentes. No entanto, se o código fornecer menos do que isso, poderemos consultar a página e ver o que não está sendo capturado.

Obter o título do cargo

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.

Se resumirmos, a função que veremos envolve as três etapas a seguir,

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)

Esse código produzirá um resultado como este,

Obter o nome da empresa

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

Usaremos instruções if/else para extrair as informações da empresa de cada um desses locais. Para remover os espaços em branco ao redor dos nomes das empresas quando eles forem emitidos, usaremos inputting.strip() no final.

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)

Obtenção de localização

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)

Receber salário

O salário é a parte mais difícil de extrair das ofertas de emprego. A maioria das postagens não publica informações sobre o salário, enquanto em outras que o fazem, pode haver vários locais para selecioná-las. Portanto, temos que escrever um código que possa pegar vários salários de vários lugares e, se nenhum salário for encontrado, precisamos criar um valor de espaço reservado "Nada encontrado" para todos os empregos que não contêm salário. 

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)

Obter o resumo do trabalho

A tarefa final é obter o resumo da vaga. Entretanto, não é possível obter os resumos das vagas para cada cargo específico porque eles não estão incluídos no HTML de uma determinada página do Indeed. Podemos obter algumas informações sobre cada vaga a partir do que é fornecido. Podemos usar o Selenium para essa finalidade.

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.

Perguntas frequentes

Perguntas frequentes:

1. Por que é necessário acessar scrape os detalhes do trabalho?
Existem muitos portais de emprego que podem notificá-lo sobre os empregos que correspondem ao seu perfil. Ainda assim, ter uma solução de emprego scraping lhe dará uma lista completa de empregos e a descrição como um banco de dados prático. Isso permitirá que você tenha uma visão melhor de todas as oportunidades de emprego em um só lugar.
2. Como o site proxy pode ajudar nos detalhes do trabalho scraping ?
A Web scraping geralmente apresenta alguns desafios, como bloqueios de IP, bloqueios geográficos e velocidade limitada. Os trabalhos de Scraping de portais de emprego também apresentam esses desafios. Para contornar todos esses problemas, os endereços proxy podem ajudá-lo com endereços IP do local necessário e garantir o anonimato
3. Quais são as bibliotecas python necessárias para scrape detalhes do trabalho?
Requests, BeautifulSoup e Pandas são bibliotecas python bastante comuns para scrape dados relacionados a trabalho de sites. A biblioteca Request é a biblioteca python mais comum usada para enviar solicitações da Web, enquanto a BeautifulSoup é responsável pela análise de dados e a biblioteca Pandas ajudará nas operações de estrutura de dados.

Artigos relacionados

Como Scrape Twitter usando Python

Como Scrape Instagram usando Python

Como Scrape Reddit usando Python

Concluindo

Neste artigo, vimos o que é a Web scraping e como ela pode ser útil em nosso dia a dia com um exemplo prático de scraping dados de emprego das páginas da Web do Indeed. Observe que os resultados que você obtém podem ser diferentes desses, pois as páginas são dinâmicas e, portanto, as informações mudam com o tempo. 

A Web Scraping é uma técnica incrível se for feita corretamente e de acordo com suas necessidades. Além disso, vimos os cinco aspectos importantes de cada anúncio de emprego e como extraí-los. Ao experimentar esse código por conta própria, você terá extraído dados de anúncios de emprego e não precisará pesquisar os empregos manualmente, o que é incrível. A mesma técnica também pode ser aplicada a outras páginas da Web, mas sua estrutura pode ser diferente. Portanto, é preciso otimizar seu código de acordo com isso. Mas todos os conceitos básicos foram abordados neste artigo, portanto, não haverá nenhuma dificuldade em scraping outras páginas também.

Se estiver procurando os serviços do proxy , não se esqueça de dar uma olhada no ProxyScrape residencial e premium proxies.