Skip to content

Commit

Permalink
Inclui a geração do arquivo .csv e queries
Browse files Browse the repository at this point in the history
  • Loading branch information
iamcarolalbuquerque committed Jul 11, 2020
1 parent aa9bf59 commit d755137
Show file tree
Hide file tree
Showing 7 changed files with 256 additions and 8 deletions.
8 changes: 6 additions & 2 deletions Application/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,18 @@
data = pd.DataFrame()

# Obtém as urls da paginação do site
# Esse método é propositalmente lento para evitar que o site nos marque como spammers :)
urls = mlws.get_urls(base_url,search_filter)

# Obtém os dados relevantes itens ofertados
for url in urls:
data = data.append(mlws.get_data(url))


print(data[['item_title', 'item_location', 'item_price']])
# print(data[['name', 'city', 'price']])
# print(data['city'].drop_duplicates().sort_values())

data[['name', 'city', 'price']].to_csv('../products.csv', index=False)


# print(data['item_location'].drop_duplicates().sort_values())

12 changes: 6 additions & 6 deletions Application/webscrapers.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def get_urls(self, base_url, search_filters):
return urls

def get_data(self, url):
data = pd.DataFrame(columns=['item_title', 'item_attrs', 'item_location', 'item_currency', 'item_price'])
data = pd.DataFrame(columns=['name', 'attrs', 'city', 'currency', 'price'])

try:
response = requests.get(url)
Expand All @@ -69,11 +69,11 @@ def get_data(self, url):
# fazendo ainda um tratamento básico de strings.
for i in range(len(items)) :

data = data.append({'item_title' : items[i].find("span", { "class" : "main-title" }).get_text().strip(),
'item_attrs' : items[i].find("div", { "class" : "item__attrs" }).get_text().strip(),
'item_location' : self.remove_city_zone(items[i].find("div", { "class" : "item__location" }).get_text().strip()),
'item_currency' : items[i].find("span", { "class" : "price__symbol" }).get_text(),
'item_price': items[i].find("span", { "class" : "price__fraction" }).get_text().replace('.','')}, ignore_index=True)
data = data.append({'name' : items[i].find("span", { "class" : "main-title" }).get_text().strip(),
'attrs' : items[i].find("div", { "class" : "item__attrs" }).get_text().strip(),
'city' : self.remove_city_zone(items[i].find("div", { "class" : "item__location" }).get_text().strip()),
'currency' : items[i].find("span", { "class" : "price__symbol" }).get_text(),
'price': items[i].find("span", { "class" : "price__fraction" }).get_text().replace('.','')}, ignore_index=True)


except Exception as e:
Expand Down
60 changes: 60 additions & 0 deletions Queries/queries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from google.cloud import bigquery
import os

# Caso não esteja configurado nas variáveis de ambiente, explicitar a chave de acesso:
# TODO: o programador deve alterar antes de executar esse código
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/caminho-para-o-arquivo.json"

# Inicializando o cliente BigQuery
client = bigquery.Client()

# Nome completo da tabela
# TODO: o programador deve alterar antes de executar esse código
table_ref = "projeto.dataset.tabela"

# PREÇO MÉDIO DO PRODUTO POR CIDADE
query1 = """
SELECT city AS Cidade, ROUND(AVG(price), 2) AS Valor_Medio
FROM `?`
GROUP BY city
ORDER BY city ASC
"""

# QUAL A CIDADE QUE POSSUI MAIS PRODUTOS OFERTADOS
query2 = """
SELECT city AS Cidade, COUNT(1) AS NumReg
FROM `?`
GROUP BY city
ORDER BY NumReg DESC, city ASC LIMIT 1
"""

# LISTAR OS 5 PRODUTOS MAIS BARATOS E O MAIS CARO
query3 = """
WITH ofertas AS
((SELECT name AS Produto, city AS Cidade, price AS Preco
FROM `?`
ORDER BY price, city ASC LIMIT 5)
UNION ALL
(SELECT name AS Produto, city AS Cidade, price AS Preco
FROM `?`
ORDER BY price DESC, city ASC LIMIT 1))
SELECT * FROM ofertas
"""

# Executando e exibindo os resultados das queries:

query_job = client.query(query1.replace('?',table_ref))
query_result = query_job.to_dataframe()

print(query_result)

query_job = client.query(query2.replace('?',table_ref))
query_result = query_job.to_dataframe()

print(query_result)

query_job = client.query(query3.replace('?',table_ref))
query_result = query_job.to_dataframe()

print(query_result)

6 changes: 6 additions & 0 deletions Queries/query1.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/* PREÇO MÉDIO DO PRODUTO POR CIDADE */

SELECT city AS Cidade, ROUND(AVG(price), 2) AS Valor_Medio
FROM `data-challenge-zenklub.cds.products`
GROUP BY city
ORDER BY city ASC
6 changes: 6 additions & 0 deletions Queries/query2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/* QUAL A CIDADE QUE POSSUI MAIS PRODUTOS OFERTADOS */

SELECT city AS Cidade, COUNT(1) AS NumReg
FROM `data-challenge-zenklub.cds.products`
GROUP BY city
ORDER BY NumReg DESC, city ASC LIMIT 1
11 changes: 11 additions & 0 deletions Queries/query3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/* LISTAR OS 5 PRODUTOS MAIS BARATOS E O MAIS CARO */

WITH ofertas AS
((SELECT name AS Produto, city AS Cidade, price AS Preco
FROM `data-challenge-zenklub.cds.products`
ORDER BY price, city ASC LIMIT 5)
UNION ALL
(SELECT name AS Produto, city AS Cidade, price AS Preco
FROM `data-challenge-zenklub.cds.products`
ORDER BY price DESC, city ASC LIMIT 1))
SELECT * FROM ofertas
161 changes: 161 additions & 0 deletions products.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
name,city,price
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,16300
Chevrolet Celta Celta Ls 1.0 (flex) 4p,São Bernardo do Campo,20900
Chevrolet Celta 1.0 Lt Flex Power 5p,Santo André,19900
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,19550
Chevrolet Celta 1.0 Ls Flex Power 5p,Ribeirão Preto,18800
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,20500
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,15999
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,17990
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,13800
Chevrolet Celta 1.0 Mpfi Lt 8v,São Paulo,18990
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,20900
Chevrolet Celta Celta Ls 1.0 (flex) 2p,Osasco,15900
Chevrolet Celta Ls,Sorocaba,19900
Chevrolet Celta Lt,São Paulo,18500
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,17112
Chevrolet Celta Celta Lt 1.0 (flex),Caieiras,22900
Chevrolet Celta Celta Ls 1.0 (flex) 2p,Osasco,15890
Chevrolet Celta Lt 1.0,São Paulo,20000
Chevrolet Celta Lt,Osasco,18000
Chevrolet Celta 1.0 Ls Flex Power 3p,Guarulhos,15000
Chevrolet Celta 1.0 Ls Flex Power 3p,Guarulhos,15000
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,22900
Chevrolet Celta 1.0 Ls Flex Power 5p,Jundiaí,14990
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,12900
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,13900
Chevrolet Celta 1.0 Lt Flex Power 5p,Guarulhos,20500
Chevrolet Celta 1.0 Mpfi Ls 8v,Campinas,15490
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 2p Manual,São Paulo,13900
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14490
Chevrolet Celta Lt 1.0 Mpfi 8v Flexpower,São Bernardo do Campo,21890
Chevrolet Celta 1.0 Mpfi Lt 8v,Sorocaba,20900
Chevrolet Celta Celta 1.0 Mpfi Ls 8v Flex 2p Manual,Rio Claro,18990
Chevrolet Celta 1.0 Ls Flex Power 5p,Santo André,17990
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,Amparo,22900
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,18499
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,20900
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,21551
Chevrolet Celta 1.0 Ls Flex Power 3p,São Bernardo do Campo,16900
Chevrolet Celta 1.0 Ls Flex Power 5p,Praia Grande,19800
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,12900
Chevrolet Celta Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São José do Rio Preto,21990
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,23900
Chevrolet Celta 1.0 Ls Flex Power 3p,Arujá,16900
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,21490
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,21555
Chevrolet Celta 1.0 Ls Flex Power 3p,Jundiaí,17900
Chevrolet Celta Celta Lt 1.0 Flex,Osasco,23900
Chevrolet Celta 1.0 Lt Flex Power 5p,Itaquaquecetuba,20900
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,Votorantim,22700
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,20900
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,19300
Chevrolet Celta Chevrolet Celta Ls 1.0 Flex,Campinas,19900
Chevrolet Celta 1.0 Lt 4 Portas,Valinhos,22990
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,22900
Chevrolet Celta 1.0 Ls Flex Power 5p,Votorantim,19900
Chevrolet Celta 1.0 Ls Flex Power 3p,Guarujá,19900
Chevrolet Celta 1.0 Lt Flex Power 5p,Votorantim,20900
Chevrolet Celta 1.0 Ls Flex Power 3p,Santo André,15500
Chevrolet Celta Celta Ls 1.0 (flex) 2p,Campinas,16990
Chevrolet Celta 1.0 Mpfi Lt 8v,São José dos Campos,19900
Chevrolet Celta Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São Paulo,22900
Chevrolet Celta Chevrolet Celta 1.0 4p Lt Flex,Piracicaba,24800
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,21497
Chevrolet Celta 1.0 Mpfi Lt 8v,Santo André,25900
Chevrolet Celta Celta 1.0 Mpfi Ls 8v Flex 4p Manual,Sorocaba,19990
Chevrolet Celta 1.0 Lt Flex Power 5p,Taubaté,20900
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São Carlos,19900
Chevrolet Celta Ls 1.0 Vhce 8v Flexpower,São Paulo,16900
Chevrolet Celta 1.0 Ls Flex Power 5p,São José do Rio Pardo,19900
Chevrolet Celta 1.0 Lt Flex Power 5p,São Bernardo do Campo,19900
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São Paulo,24890
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,19900
Chevrolet Celta 1012487,São Paulo,19900
Chevrolet Celta Celta Ls 1.0 Flex,Campinas,16990
Chevrolet Celta Life,Carapicuíba,12900
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São Paulo,20780
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 2p Manual,Sorocaba,18900
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 4p Manual,São Paulo,17000
Chevrolet Celta 1.0 Mpfi 8v Flexpower 5p,São Paulo,14990
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São José dos Campos,21990
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,Vinhedo,21900
Chevrolet Celta 1.0 Mpfi Vhce 8v Flex 4p Manual,Saltinho,20990
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,Votorantim,22700
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 2p Manual,Mogi das Cruzes,17800
Chevrolet Celta 1.0 Lt Flex Power 5p,Tietê,20999
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 4p Manual,Espírito Santo do Pinhal,19490
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São Paulo,25900
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 4p Manual,Bauru,19900
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 2p Manual,Marília,16490
Chevrolet Celta Celta Lt 1.0 (flex),Mogi das Cruzes,21900
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual 2012/2013,Piracicaba,22990
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,São Paulo,19890
Chevrolet Celta 1.0 Mpfi Lt 8v Flex 4p Manual,Marília,20900
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,13900
Chevrolet Celta 1.0 Ls Flex Power 3p,Santo André,15000
Chevrolet Celta Celta Lt,Suzano,20000
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,14700
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,20550
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,Cipó Guaçu,17000
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,13500
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,Campinas,18990
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14500
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,17000
Chevrolet Celta 1.0 Lt Flex Power 5p,Osasco,19000
Chevrolet Celta 1.0 Lt Flex Power 5p,Carapicuíba,15500
Chevrolet Celta 1.0 Lt Flex Power 5p,São José dos Campos,21000
Chevrolet Celta 1.0 Lt Flex Power 5p,São Vicente,17000
Chevrolet Celta 1.0 Lt Flex Power 5p,Sumaré,20500
Chevrolet Celta 1.0 Lt Flex Power 5p,Itapevi,19000
Chevrolet Celta 1.0 Lt Flex Power 5p,Mococa,21000
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,16500
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14000
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,20500
Chevrolet Celta 1.0 Ls Flex Power 3p,Ibitinga,16500
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,São Paulo,19999
Chevrolet Celta 1.0 Ls Flex Power 3p,São Bernardo do Campo,15500
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,Indaiatuba,19000
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,19500
Chevrolet Celta 1.0 Ls Flex Power 3p,Ferraz de Vasconcelos,15000
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14000
Chevrolet Celta 1.0 Ls Flex Power 5p,Caieiras,18500
Chevrolet Celta 1.0 Ls Flex Power 3p,Piracicaba,16900
Chevrolet Celta 1.0 Ls Flex Power 3p,Francisco Morato,13900
Chevrolet Celta 1.0 Life Flex Power 5p,Santo André,19000
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,18000
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14500
Chevrolet Celta 1.0 Ls Flex Power 5p,São Bernardo do Campo,17600
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,Arujá,15900
Chevrolet Celta 1.0 Lt Flex Power 5p,Guarujá,22000
Chevrolet Celta 1.0 Ls Flex Power 3p,Ribeirão Pires,12950
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14500
Chevrolet Celta 1.0 Ls Flex Power 3p,Itupeva,17000
Chevrolet Celta 1.0 Ls Flex Power 3p,Barueri,13000
Chevrolet Celta 1.0 Lt Flex Power 5p,Jundiaí,21900
Chevrolet Celta 1.0 Ls Flex Power 3p,Barueri,14800
Chevrolet Celta 1.0 Ls Flex Power 3p,Valinhos,13800
Chevrolet Celta 1.0 Ls Flex Power 3p,Guarulhos,18000
Chevrolet Celta 1.0 Ls Flex Power 3p,Sorocaba,15990
Chevrolet Celta 1.0 Ls Flex Power 5p,Americana,15000
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,18900
Chevrolet Celta 1.0 Lt Flex Power 5p,Itatiba,21000
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,14500
Chevrolet Celta 1.0 Ls Flex Power 3p,Araçatuba,16000
Chevrolet Celta 1.0 Ls Flex Power 3p,Osasco,15300
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,Jundiaí,19500
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,16900
Chevrolet Celta 2012,São Paulo,19900
Chevrolet Celta 1.0 Lt Edição Limitada Flex Power 5p,São Paulo,19000
Chevrolet Celta 1.0 Lt Flex Power 5p,Campinas,16430
Chevrolet Celta 1.0 Ls Flex Power 3p,São Carlos,14800
Chevrolet Celta 1.0 Lt Flex Power 5p,Santo André,20000
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,13900
Chevrolet Celta 1.0 Mpfi Ls 8v Flex 2p Manual 2011/2012,Piracicaba,17990
Chevrolet Celta 1.0 Lt Flex Power 5p,Guarulhos,18800
Chevrolet Celta Celta Lt 1.0 (flex),Santo André,16720
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,15750
Chevrolet Celta 1.0 Lt Flex Power 5p,São Paulo,13900
Chevrolet Celta 1.0 Ls Flex Power 3p,São Paulo,15000
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,21550
Chevrolet Celta 1.0 Ls Flex Power 5p,São Paulo,21498

0 comments on commit d755137

Please sign in to comment.