-
Notifications
You must be signed in to change notification settings - Fork 0
/
scraping.py
61 lines (47 loc) · 2.18 KB
/
scraping.py
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
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
# Meu objeto de analise e pesquisa
vagas = {'desenvolvedor%20front%20end','desenvolvedor%20back%20end', 'banco%20de%20dados', 'fullstack',
'devops'}
info_vagas = {'empresa':[],'cargo':[], 'modalidade':[], 'cidade':[], 'categoria':[]}
for vaga in vagas:
url = f'https://portal.gupy.io/job-search/term={vaga}'
# Inicializar o navegador Chrome usando o Selenium
driver = webdriver.Chrome()
driver.get(url)
# Rolagem até o fim da página, visando carregar to/do conteúdo
while True:
body = driver.find_element(By.TAG_NAME, 'body')
body.send_keys(Keys.END)
sleep(1)
if driver.execute_script("return window.scrollY + window.innerHeight >= document.documentElement.scrollHeight"):
break
# Obter o conteúdo da página após rolar até o final
page_content = driver.page_source
driver.quit()
# Usar BeautifulSoup para analisar o conteúdo da página
soup = BeautifulSoup(page_content, 'html.parser')
infos = soup.find_all('div', class_=re.compile('dgHpeN'))
categoria = soup.find('h1', class_=re.compile('bGwhtT')).get_text().strip()
for info in infos:
empresa = info.find('p', class_=re.compile('cQyvth')).get_text().strip()
cargo = info.find('h2', class_=re.compile('XNNQ')).get_text().strip()
spans = info.find_all('span', class_=re.compile('cezNaf'))
# Verificar se há pelo menos dois spans (modalidade e cidade)
if len(spans) >= 2:
cidade = spans[0].get_text().strip()
modalidade = spans[1].get_text().strip()
info_vagas['empresa'].append(empresa)
info_vagas['cargo'].append(cargo)
info_vagas['modalidade'].append(modalidade)
info_vagas['cidade'].append(cidade)
info_vagas['categoria'].append(categoria)
#Por opcao vou salvar todas, no mesmo arquivo
df = pd.DataFrame(info_vagas)
df.to_csv(f'C:/Users/User/PycharmProjects/webscraping/vagas_abertas.csv', encoding='utf-8', sep=',')