<jupyter_start><jupyter_text><jupyter_code># Importando as bibliotecas
from bs4 import BeautifulSoup
import requests
import pandas as pd
from time import sleep
import re
import numpy as np
re_precos = '<span class="price__fraction">(.*)</span>'
re_quartos = r'\| (.*) quarto'
re_areas = '> (.*) m² '
re_quarto_area_ausente = "> (.*) quarto"
zonas = ['norte', 'sul', 'leste', 'oeste']
paginas = ['', '_Desde_49', '_Desde_97', '_Desde_145', '_Desde_193', 
           '_Desde_241', '_Desde_289']
dados = {'zona': [],
         'quartos': [],
         'area': [],
         'preco': []}

for zona in zonas:
  for pagina in paginas:
    url = f'https://imoveis.mercadolivre.com.br/apartamentos/aluguel/sao-paulo/sao-paulo-zona-{zona}/{pagina}'

    c = requests.get(url).content
    soup = BeautifulSoup(c, 'html.parser')

    preco = soup.find_all(name='span', attrs={'class': 'price__fraction'})
    atributos = soup.find_all(name='div', attrs={'class': 'item__attrs'})

    for p in preco:
      valor = re.findall(re_precos, str(p))[0]
      dados['preco'].append(valor)
    
    for atributo in atributos:
      n_quartos = re.findall(re_quartos, str(atributo))
      area = re.findall(re_areas, str(atributo))

      if n_quartos == []:
        n_quartos = re.findall(re_quarto_area_ausente, str(atributo))
        if n_quartos == []:
          n_quartos = np.nan
        else:
          n_quartos = n_quartos[0]
      else:
        n_quartos = n_quartos[0]
      dados['quartos'].append(n_quartos)

      if area == []:
        area = np.nan
      else:
        area = area[0]      
      dados['area'].append(area)

      dados['zona'].append(zona)
    sleep(5)
# Gerando do DataFrame
df = pd.DataFrame(dados)
# Visualizando o DataFrame
df<jupyter_output><empty_output><jupyter_text>***Importante***:Note na coluna "preco" que os dados da escala de milhar apresentam pontos, o que representa um problema uma vez que o Python irá interpretar esses valores como sendo um float. Por exemplo, um aluguel igual a 6 mil reais será considerado como 6 reais fazendo com que nossa escala fique completamente distorcida, gerando problemas que posteriormente irão afetar os algorítmos. Devemos então tratar tais valores.<jupyter_code># Alterando os dados da coluna preco para remover os pontos
df['preco'] = df['preco'].map(lambda x: x.replace('.', ''))
df.head(10)
# Salvando o DataFrame em um arquivo .csv
df.to_csv('dados_imoveis.csv')<jupyter_output><empty_output>
StarcoderdataJupyterStructuredCleanDedup