diff --git a/mlsucker.py b/mlsucker.py
index d52a3f1..6ef3a48 100644
--- a/mlsucker.py
+++ b/mlsucker.py
@@ -8,22 +8,24 @@
import time
import random
-def get_value(node, nome, valor_default=''):
- campo = node.find(nome, class_="price-tag-fraction")
- if campo is None:
- return valor_default
- return campo.text
-
-def get_cents(node, nome, valor_default=''):
- campo = node.find(nome, class_="price-tag-cents")
- if campo is None:
- return valor_default
- return campo.text
+def get_price(node):
+ # Função para obter o preço do nó da página
+ price_node = node.find('span', class_='andes-money-amount__fraction')
+ cents_node = node.find('span', class_='andes-money-amount__decimals')
+
+ if price_node is not None:
+ price = price_node.text.strip()
+ if cents_node is not None:
+ price += ',' + cents_node.text.strip()
+ return price
+ return None
i = 1
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'}
termo_busca = input("Digite o termo de busca: ")
+tags = input("Digite as tags separadas por vírgulas: ").split(',')
+
base_url = f"https://lista.mercadolivre.com.br/{termo_busca}"
# Caminho e nome do arquivo CSV
@@ -66,7 +68,6 @@ def get_cents(node, nome, valor_default=''):
attribute_global_default = '' # Global do atributo em branco
attribute_default_default = '' # Valor padrão do atributo em branco
-
with open(nome_arquivo, mode='w', newline='', encoding='utf-8') as arquivo_csv:
writer = csv.writer(arquivo_csv, delimiter=',')
writer.writerow([
@@ -84,34 +85,17 @@ def get_cents(node, nome, valor_default=''):
page = requests.get(base_url, headers=headers)
soup = BeautifulSoup(page.text, "html.parser")
- valor = ''
-
for div in soup.find_all('div', class_='ui-search-result__content-wrapper'):
produto = div.find('h2', class_='ui-search-item__title')
link = div.find("a", class_="ui-search-link")
- valor_node = div.find('span', class_='price-tag-fraction')
- cents_node = div.find('span', class_='price-tag-cents')
-
- if valor_node is not None:
- valor = valor_node.text.strip()
- if cents_node is not None:
- valor += ',' + cents_node.text.strip()
- valor_float = float(valor.replace('.', '').replace(',', '.'))
-
- # Desconto de 12%
- valor_desconto = valor_float * 0.88
- valor_desconto_str = "{:.2f}".format(valor_desconto).replace('.', ',')
- else:
- valor_desconto_str = ''
+ # Obter preço usando a função get_price
+ valor_desconto_str = get_price(div)
imagens = []
video = ''
- if div.find("p", class_="ui-search-item__shipping ui-search-item__shipping--free") is None:
- frete_gratis = False
- else:
- frete_gratis = True
+ frete_gratis = bool(div.find("p", class_="ui-search-item__shipping ui-search-item__shipping--free"))
if link is not None:
response_produto = requests.get(link['href'], headers=headers)
@@ -128,7 +112,8 @@ def get_cents(node, nome, valor_default=''):
# Quando não encontrar uma descrição, inserir o título do produto
descricao_text = '
' + produto.text + '
\n\n' + produto.text
- imagem_tags = site_produto.find_all('img', class_='ui-pdp-image')
+ #imagem_tags = site_produto.find_all('img', class_='ui-pdp-image')
+ imagem_tags = site_produto.find_all('img', class_='class="ui-pdp-image ui-pdp-gallery__figure__image"')
for imagem in imagem_tags:
if 'data-src' in imagem.attrs:
@@ -139,51 +124,39 @@ def get_cents(node, nome, valor_default=''):
imagens_str = ', '.join(imagens)
- tags = []
-
- tags_div = site_produto.find('div', class_='ui-pdp-attributes__value-list')
- if tags_div:
- tags_links = tags_div.find_all('a')
- tags = [tag_link.text for tag_link in tags_links]
-
- sku = ''
-
- sku_span = site_produto.find('span', class_='ui-pdp-buybox__sku-value')
- if sku_span:
- sku = sku_span.text.strip()
+ sku = site_produto.find('span', class_='ui-pdp-buybox__sku-value')
+ if sku:
+ sku = sku.get_text(strip=True, separator='\n')
else:
sku = '' + ''.join(random.choices('6789', k=13))
- if not tags:
- tags = ['Ferramentas']
-
writer.writerow([
i, 'simple', sku, produto.text, published_default, is_featured_default, visibility_default,
short_description_default, descricao_text, date_sale_price_starts_default,
date_sale_price_ends_default, tax_status_default, tax_class_default, in_stock_default,
stock_default, low_stock_amount_default, backorders_allowed_default, sold_individually_default,
weight_default, length_default, width_default, height_default, allow_customer_reviews_default,
- purchase_note_default, valor_desconto_str, valor, 'Ferramentas', ', '.join(tags), shipping_class_default,
- imagens_str, download_limit_default, download_expiry_days_default, parent_default,
- grouped_products_default, upsells_default, cross_sells_default, external_url_default,
- button_text_default, position_default, attribute_name_default, attribute_value_default,
- attribute_visible_default, attribute_global_default, attribute_default_default, video
+ purchase_note_default, valor_desconto_str, valor_desconto_str, ', '.join(tags), ', '.join(tags),
+ shipping_class_default, ', '.join(imagens), download_limit_default, download_expiry_days_default,
+ parent_default, grouped_products_default, upsells_default, cross_sells_default,
+ external_url_default, button_text_default, position_default, attribute_name_default,
+ attribute_value_default, attribute_visible_default, attribute_global_default,
+ attribute_default_default, video
])
- print('Código: ' + str(i) + ', Produto: ' + produto.text + ', Valor: ' + valor_desconto_str)
-
+ print('Código: ' + str(i) + ', Produto: ' + produto.text + ', Valor: ' + str(valor_desconto_str))
print("==========================")
- if link is not None:
+ if link:
print('Link: ' + link['href'])
- if descricao:
+ if descricao_text:
print('Descrição do produto: ' + descricao_text)
else:
print('Descrição do produto não encontrada.')
- if imagens_str:
- print('Imagens: ' + imagens_str)
+ if imagens:
+ print('Imagens: ' + ', '.join(imagens))
else:
print('Nenhuma imagem encontrada.')
@@ -222,6 +195,5 @@ def get_cents(node, nome, valor_default=''):
break
-
print("Arquivo CSV salvo com sucesso:")
print(caminho_arquivo)