Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[WEB-SCRAPING] Problema ao acessar site com filtros

Bom dia.

Estou tentando fazer um web-scraping de alguns imóveis de um bairro do Rio de Janeiro com alguns filtros. Entretanto ao jogar o link para o BeautifulSoup e fazer o print do código fonte da página, me aparecem imóveis completamente diferentes e de outras regiões. Como consigo contornar esse problema e enxergar apenas os imóveis com os filtros que foram aplicados ? ( Esse é o link do site já com os filtros: https://vivareal.com.br/aluguel/?__vt=rpci:a#area-ate=100&onde=BR-Rio_de_Janeiro-NULL-Rio_de_Janeiro-Zona_Sul-Leblon&preco-ate=10000&tipos=consultorio_comercial,edificio-residencial_comercial,granja_comercial,galpao_comercial,imovel-comercial_comercial,loja_comercial,lote-terreno_comercial,ponto-comercial_comercial,sala_comercial)

Esse é o código até então.

import requests
from bs4 import BeautifulSoup
url = requests.get('https://www.vivareal.com.br/aluguel/?__vt=rpci:a#area-ate=100&onde=BR-Rio_de_Janeiro-NULL-Rio_de_Janeiro-Zona_Sul-Leblon&preco-ate=10000&tipos=consultorio_comercial,edificio-residencial_comercial,granja_comercial,galpao_comercial,imovel-comercial_comercial,loja_comercial,lote-terreno_comercial,ponto-comercial_comercial,sala_comercial')
soup = BeautifulSoup(url.content, 'html.parser')
print(soup)

anuncio = soup.find('div', {'class' :'js-card-selector'})
anuncio

anuncio.find('div',{'class' :'js-property-card-prices'}).getText().split()[1]
3 respostas

Olá Antonio,

Isso acontece porque o site realiza a filtragem dos imóveis utilizando javascript, e nem o BeautifulSoup nem o requests.get suportam a execução de javascript.

Você pode fazer o teste desativando o javascript no seu navegador e acessando a página.

Mas existem formas de contornar isso, utilizando o selenium por exemplo. O selenium simula um navegador, com ele você vai poder carregar a página e executar o javascript, e assim conseguir acessar as informações que você precisa.

solução!

Você pode acessar esse link para ver um código que eu fiz de exemplo utilizando o selenium para fazer o web-scraping desse site.

Abaixo segue o código de exemplo:

from selenium import webdriver
from bs4 import BeautifulSoup

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome("chromedriver", options=options)

url = "https://www.vivareal.com.br/aluguel/?__vt=rpci:a#area-ate=100&onde=BR-Rio_de_Janeiro-NULL-Rio_de_Janeiro-Zona_Sul-Leblon&preco-ate=10000&tipos=consultorio_comercial,edificio-residencial_comercial,granja_comercial,galpao_comercial,imovel-comercial_comercial,loja_comercial,lote-terreno_comercial,ponto-comercial_comercial,sala_comercial"

driver.implicitly_wait(30)
driver.get(url)

soup = BeautifulSoup(driver.page_source, 'html.parser')
total = soup.find('strong', {'class' : 'results-summary__count js-total-records'})
print("Total de resultados com selenium:", total.string)

Muito obrigado pelas informações Lucas!!