Olá, estou fazendo um código para pegar informações para de um site de imóveis, porém fica repetindo as informações da primeira página no dataframe.
Segue o código abaixo:
#Importando as bibliotecas
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
from bs4 import BeautifulSoup
import requests
import pandas as pd
#Input de informações
estado = str(input('Insira o Estado do Imovel: '))
cidade = str(input('Insira a cidade do Imovel: '))
pages = int(input('Insira o número de páginas que deseja pegar: '))
print('O Estado e a cidade escolhida foi:'+estado+' e '+cidade)
#Criando lista e dicionario
cards = []
#Iterando paginas do site, só vai até o 5, verificar a forma de capturar no HTML o numero max de paginas existente
for i in range(pages):
#Endereço do site
url = 'https://www.vivareal.com.br/venda/'+estado+'/'+cidade+'/casa_residencial/?pagina='+str(i+1)
#Criando uma mascara para enganar o site, ele da um erro pois percebe que nao esta sendo acessado por um navegador, por esse motivo tem que fazer isso.
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
#Informações para fingir ser um navegador
try:
req = Request(url, headers = headers)
response = urlopen(req)
html = response.read()
except HTTPError as e:
print(e.status, e.reason)
except URLError as e:
print(e.reason)
#Aqui ele faz um tratamento para deixar o html mais amigável
def trata_html(input):
return " ".join(html.split()).replace('> <', '><')
html = html.decode('utf-8')
" ".join(html.split()).replace('> <', '><')
#Criando objeto para guardar a função trata_html
html = trata_html(html)
#Criando um objeto para guardar a função do BS e não precisar ficar repetindo a função
soup = BeautifulSoup(html, 'html.parser')
#Obtendo as TAGs de interesse
anuncios =soup.find('div', {'class':'results__content'}).findAll('article', {'class': 'property-card__container'})
for anuncio in anuncios:
card ={}
#Capturando informação de valores
card['value'] = anuncio.find('div', {'class': 'property-card__price'}).getText().split()[1]
##Capturando informação de endereço
card['address'] = anuncio.find('span', {'class': 'property-card__address'}).getText().split('-')[0]
#Capturando informação do bairro
card['district'] = anuncio.find('span', {'class': 'property-card__address'}).getText().split('-')[1]
#Capturando informação de metragem
card['floorsize'] = anuncio.find('ul', {'class': 'property-card__details'}).getText().split()[0]
#Capturando informação de numero de quartos
card['numberOfRooms'] = anuncio.find('ul', {'class': 'property-card__details'}).getText().split()[2]
#Capturando informação de numero de banheiros
card['numberOfBathrooms'] = anuncio.find('ul', {'class': 'property-card__details'}).getText().split()[4]
#Empilhando os cards
cards.append(card)
#Criando dataframe para faccilitar a visualização
dataset = pd.DataFrame(cards)
#Verificando o dataframe
dataset
Como faço para não repetir a primeira página?