-
Notifications
You must be signed in to change notification settings - Fork 0
/
scrapper.py
90 lines (70 loc) · 3.03 KB
/
scrapper.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
import environment
import time
# configurando o browser
chrome_options = webdriver.chrome.options.Options()
chrome_options.headless = True # nao queremos uma interface grafica
browser = webdriver.Chrome("/home/vitor/Downloads/chromedriver", options=chrome_options)
def seleciona_caixa_de_selecao(restaurante):
"""
Simula o clique de um usuário para selecionar o restaurante do cardápio que
será consultado. Faz a requisição ao site da FUMP e, a partir desse ponto,
deixa as informações referentes ao cardápio no HTML da página
"""
caixa_de_selecao = browser.find_element_by_id("contentPlaceHolder_drpRestaurante")
try:
teclas_down = environment.restaurantes[restaurante]
caixa_de_selecao.click()
for _ in range(teclas_down):
caixa_de_selecao.send_keys(Keys.DOWN)
caixa_de_selecao.send_keys(Keys.ENTER)
except Exception as e:
print(f"Erro ao selecionar a caixa de seleção: {e}")
def encontra_cardapio():
"""
Procura no HTML da página pelo cardápio do restaurante e almoço em questão.
Armazena a lista encontrada em um dicionário com cada um dos itens.
Retorna um booleano que indica se o cardápio foi ou não encontrado
"""
html = browser.page_source
soup = BeautifulSoup(html, "html.parser")
# Cardápio é uma lista que está dentro de uma tag <ul> cujo id é "carte"
carte = soup.find("ul", {"id": "carte"})
cardapio = []
if carte:
# A tag <ul> contém outras informações, navegamos por outras tags internas
if environment.almoco:
carte = soup.find("ul", {"id": "carte"}).find("ul")
elif environment.jantar:
carte = (
soup.find("ul", {"id": "carte"})
.find("li", {"class": "marginTop10"})
.find("ul")
)
# Armazenando o texto de "carte" na lista "cardapio"
cardapio = [elemento.get_text() for elemento in carte.find_all("li")]
# Atualizando o dicionário de cardápio
environment.cardapio.update(dict(zip(environment.cardapio, cardapio)))
encontrou_cardapio = True
else:
print("Cardápio inexistente!")
# Reinicializando o dicionário para evitar valores de cardápios anteriores
environment.cardapio = environment.cardapio.fromkeys(environment.cardapio, "")
encontrou_cardapio = False
return encontrou_cardapio
def pega_cardapio(restaurante):
"""
Junta todos os métodos necessários para acessar a página da FUMP,
selecionar os restaurantes e retirar os dados de cada cardápio
"""
try:
browser.get(environment.site_fump)
seleciona_caixa_de_selecao(restaurante)
encontrou_cardapio = encontra_cardapio()
print(environment.cardapio)
return encontrou_cardapio
except Exception as e:
print(f"Erro ao processar restaurante {restaurante}: {e}")
return False