Oii Gabriel, como você está?
Peço desculpas pela demora em obter um retorno.
Isso está acontecendo porque o site está bloqueando a solicitação. Por algum método interno ele consegue identificar que estamos fazendo um scraping, logo, retorna 403 e redireciona para uma página de verificação de robô. O erro 403 se refere a acesso não autorizado do conteúdo.
Uma maneira de conseguir obter os dados, é utilizar a biblioteca Selenium que possui uma robustez maior para lidar com web scraping, sendo capaz de abrir automaticamente a página e simular as mãos humanas, efetuando cliques, preenchendo campos, etc. Para o exemplo de código abaixo precisaremos instalar um webdriver responsável por simular essa interação com o navegador. No meu caso, estou utilizando o Firefox, e você pode baixar o webdriver dele neste link. Caso utilize o Chrome, o endereço para download do webdriver é este. Sempre verifique a versão atual do seu navegador e a do webdriver, as duas têm que ser compatíveis (as mesmas).
Agora, indo para a parte prática teremos a instalação das bibliotecas necessárias:
pip install selenium
pip install beautifulsoup4
Já o código ficará da seguinte maneira:
from selenium.webdriver import Firefox
url = ('https://www.imovelweb.com.br/propriedades/sobrado-em-condominio-localizado-1-uma-quadra-da-2956570473.html')
driver = Firefox()
driver.get(url)
print(driver.page_source)
driver.close()
No código acima, o que estamos fazendo é abrindo o navegador na URL objetivo e extraindo o código fonte da página através do comando page_source
.
Bônus: Partindo do código fonte, você pode ou utilizar a biblioteca BeautifulSoup para analisar ou fazer a análise com o próprio selenium, no exemplo abaixo utilizei a BeautifulSoup. Então, para pegar o título, valor e descrição o seguinte código poderá ser utilizado:
from selenium.webdriver import Firefox
from bs4 import BeautifulSoup
url = ('https://www.imovelweb.com.br/propriedades/sobrado-em-condominio-localizado-1-uma-quadra-da-2956570473.html')
driver = Firefox()
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
print(f"Título: {soup.find('h2', class_='title-type-sup').text.strip()}")
print(f"Valor do imóvel: {soup.find('div', class_='price-items').text.strip()}")
print(f"Descrição: {soup.find('div', id='longDescription').text.strip()}")
driver.close()
Abaixo, uma demonstração via gif do funcionamento:
Qualquer dúvida fico à disposição.
Abraços e bons estudos!