def varrerImoveis(): for categoria in categorias: url_base = "https://www.megaleiloes.com.br/imoveis/"+categoria+"?pagina=" proximo = True numeroAtual = 1 while(proximo): # carregando a pagina no requests.get print(url_base+str(numeroAtual)) paginaInicial = pegarconteudo(url_base+str(numeroAtual)) soup = BeautifulSoup(paginaInicial[0], "lxml") # se não teve erro 404 prosseguir if paginaInicial[1] != '404': finaldaspaginas = soup.find("li", class_="next disabled") if finaldaspaginas == None: numeroAtual = numeroAtual + 1 miniaturas = soup.find("ul", class_="thumbnails").find_all("li", class_="item-row") #TESTAR FOR for miniatura in miniaturas: linkdoImovel = miniatura.find("a", class_="card-image")['href'].replace('//','/').replace(':/','://') dadosImovel = obterDados(linkdoImovel) inserirNoBanco(dadosImovel) else: proximo=False
# começando, pegando a página principal de imóveis (somente com filtro de imoveis) e colocando ela em uma lista na # primeira posição paginas = ["https://www.megaleiloes.com.br/imoveis?type=1"] # criando um set para popular com as URLs individuais de cada imóvel linksdosImoveis = set() # vamos ciclar pela lista pagina que sera incrementada com novas paginas a medida que o bsoup for achando mais links # com "próxima pagina", quando ele não encontrar mais novas páginas ele vai breakar e já vamos ter coletado todos os links # de todos os imóveis for pagina in paginas: paginaInicial = pegarconteudo(pagina) soup = BeautifulSoup(paginaInicial, "lxml") finaldaspaginas = soup.find("li", class_="next disabled") miniaturas = soup.find_all("li", class_="item-row card success span3 ") for miniatura in miniaturas: linkdoImovel = miniatura.find("a", class_="card-image") linksdosImoveis.add(linkdoImovel['href']) proximaPagina = soup.find("li", class_="next").find("a") proximaPagina = "https://www.megaleiloes.com.br" + proximaPagina["href"]
# criando um set para codigos que já foram scrapeados codigosScrapeados = set() # vamos ciclar pela lista pagina que sera incrementada com novas paginas a medida que o bsoup for achando mais links # com "próxima pagina", quando ele não encontrar mais novas páginas ele vai breakar e já vamos ter coletado todos os links # de todos os imóveis contador_erro_404 = 0 for pagina in paginas: # carregando a pagina no requests.get paginaInicial = pegarconteudo(pagina) # se não teve erro 404 prosseguir if paginaInicial[1] != '404': # carregando a pagina no soup soup = BeautifulSoup(paginaInicial[0], "lxml") # tentando encontrar a tag que vai me indicar que chegou na ultima pagina de listagem de imoveis finaldaspaginas = soup.find("li", class_="next disabled") # buscando com o soup todos os links dos imoveis em cada pagina de listagem de imoveis
def obterDados(paginadeimovel): requestsPaginadoImovel = pegarconteudo(paginadeimovel) # carregando o requests.get da pagina do imovel no bsoup soup = BeautifulSoup(requestsPaginadoImovel[0], "lxml") retorno = {} retorno['codigoImovel'] = paginadeimovel.split("-")[-1] print(retorno['codigoImovel']) retorno['status_code'] = int(requestsPaginadoImovel[1]) retorno['varaImovel'] = "N/D" retorno['forumImovel'] = "N/D" retorno['numprocessoImovel'] = "N/D" retorno['linkprocessoImovel'] = "N/D" retorno['controlenumImovel'] = "N/D" retorno['autorImovel'] = "N/D" retorno['reuImovel'] = "N/D" retorno['comitenteImovel'] = "N/D" retorno['valoravaliavaoImovel'] = "N/D" retorno['valoravaliavaoImovel'] = "N/D" retorno['matriculaImovelPDF'] = "N/D" retorno['laudoImovelPDF'] = "N/D" retorno['editalImovelPDF'] = "N/D" if retorno['status_code'] != 404: retorno['partecomLotes'] = soup.find("div", id="batches-list") retorno['tituloImovel'] = soup.find("h1", class_="page-header").text.strip() try: retorno['statusImovel'] = soup.find("div", class_="span5").find("div").find("span").text except: pass retorno['pracaImovel'] = soup.find("div", class_="span5").find("div").find("div", class_="pull-right").text retorno['tipoImovel'] = soup.find("ul", class_="description").find("li").find("strong").text retorno['leilaoImovel'] = soup.find("ul", class_="description").find_all("li")[1].text[8:] retorno['lanceinicialImovel'] = soup.find("ul", class_="description").find_all("li")[2].text[15:] retorno['ultimolanceImovel'] = soup.find("ul", class_="description").find_all("li")[3].text[14:] retorno['incrementoImovel'] = soup.find("ul", class_="description").find_all("li")[4].text[12:] retorno['localizacaoImovel'] = soup.find("ul", class_="description").find_all("li")[5].text[13:] retorno['inicioImovel'] = soup.find("ul", class_="description").find_all("li")[6].text[8:] retorno['terminoImovel'] = soup.find("ul", class_="description").find_all("li")[7].text[9:] retorno['enderecoImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[0].find("td").text retorno['descricaoImovel'] = soup.find("div", id="batch-description").text.strip() try: retorno['editalImovelPDF'] = soup.find("div", id="buttons").find_all("a")[2]["href"] retorno['nomedoarquivoEditalPDF'] = retorno['editalImovelPDF'].split("/")[6] except: pass try: retorno['laudoImovelPDF'] = soup.find("div", id="buttons").find_all("a")[3]["href"] retorno['nomedoarquivoLaudoPDF'] = retorno['laudoImovelPDF'].split("/")[6] except: pass try: retorno['matriculaImovelPDF'] = soup.find("div", id="buttons").find_all("a")[4]["href"] retorno['nomedoarquivoMatriculaPDF'] = retorno['matriculaImovelPDF'].split("/")[6] except: pass retorno['contratoImovel'] = soup.find("textarea", id="contract").text retorno['localimagemImovel'] = soup.find("div", class_="span7").find("div", class_="carousel slide") retorno['forumImovel'] = "N/D" retorno['varaImovel'] = "ND" retorno['orumImovel'] = "ND" retorno['varaImovel'] = "ND" retorno['numprocessoImovel'] = "ND" retorno['controlenumImovel'] = "ND" retorno['linkprocessoImovel'] = "ND" retorno['autorImovel'] = "ND" retorno['reuImovel'] = "ND" retorno['valoravaliavaoImovel'] = "ND" if retorno['tipoImovel'] == "Leilão Judicial": retorno['forumImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[2].find("td").text retorno['varaImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[1].find("td").text retorno['numprocessoImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[3].find("td").find("a").text retorno['controlenumImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[3].find("td").text[-8:] retorno['linkprocessoImovel'] = soup.find("div", class_="span9").find("a")["href"] retorno['autorImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[4].find("td").text retorno['reuImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[5].find("td").text retorno['valoravaliavaoImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[7].text.split("}")[1].split("A descr")[0].split("o:")[1].strip() retorno['comitenteImovel'] = "N/D" if retorno['tipoImovel'] == "Leilão Extrajudicial": retorno['comitenteImovel'] = soup.find("div", class_="span9").find_all("tr")[1].find("td").text try: retorno['valoravaliavaoImovel'] = soup.find("table", class_="table table-nomargin").find_all("tr")[3].text.split("}")[1].split("A descr")[0].split("o:")[1].strip() except: pass return retorno