Este script é um exemplo de Web Scraper construído em
Python.
Script construído em Python que extrai e armazena informações sobre os anúncios disponibilizados no site Zap Imóveis em um banco de dados SQL containerizado.
O Script emprega Selenium para o web scraping, e BeautifulSoup para o parse do HTML.
Para mais informações sobre sua utilização, leia as instruções abaixo.
.\
│
├── docker\
│ └── docker-compose.yml
│
├── .env
├── .env.example
├── .gitignore
├── README.md
├── output_format_example.json
├── requirements.txt
├── scraped_page_example.html
├── scraper-logo.png
├── test.py
└── zap.py
pymysql
requests
beautifulsoup4
selenium
python-dotenv
-
Rode
git clone
para clonar o projeto dentro de seu repositório local Git -
Crie uma conta gratuita no site ZenRows para obter um proxy. Após a criação da conta, copie a URL de proxy vista em
https://app.zenrows.com/builder
, logo abaixo da API key -
Insira a URL do proxy (e.g
http://<SUA_API_KEY>:@proxy.zenrows.com:8001
), recebida no ZenRows, no arquivo .env na raiz do projeto. Para isso, renomeie o arquivo.env.example
para.env
e adicione a URL do proxy, neste formato:
PROXY_URL=<SUA_URL_DE_PROXY>
-
Instale a versão correta do geckodriver para o seu sistema operacional. Baixe e instale a versão adequada (Linux, Mac, Windows) para garantir que o script funcione corretamente
-
O arquivo docker-compose.yml contém uma base de dados SQL pronta para uso. Para inicializá-la, com o Docker instalado e rodando, digite os seguinte comandos:
cd docker
docker-compose up -d
- Instale as dependências necessárias listadas no arquivo
requirements.txt
usando opip
:
pip install -r requirements.txt
- Antes de executar o script principal
zap.py
, é recomendável rodar o script de testetest.py
, o qual abre uma página do Google para garantir que tudo está funcionando corretamente:
python test.py
- Na raiz do projeto, há um arquivo HTML chamado
scraped_page_example.html
que mostra o formato de página afetada pelo scraping do script - Ainda na raiz do projeto, há o arquivo
output_format_example.json
, que mostra como cada imóvel da página é inserido na tabela SQL finalproperties
- O script examina apenas uma única página por vez, para evitar a detecção de bots do site. Caso deseje escanear mais do que uma única página, altere o valor da variável
url
na funçãosearchZapImoveis
para a página desejada.
Exemplo:
# first page
https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/?__ab=sup-hl-pl:newC,exp-aa-test:control,super-high:new,olx:control,phone-page:control,off-no-hl:new,zapcopsmig:control&transacao=venda&onde=,S%C3%A3o%20Paulo,S%C3%A3o%20Paulo,,,,,city,BR%3ESao%20Paulo%3ENULL%3ESao%20Paulo,-23.555771,-46.639557,&tipos=apartamento_residencial&pagina=1
# second page
https://www.zapimoveis.com.br/venda/apartamentos/sp+sao-paulo/?__ab=sup-hl-pl:newC,exp-aa-test:control,super-high:new,olx:control,phone-page:control,off-no-hl:new,zapcopsmig:control&transacao=venda&onde=,S%C3%A3o%20Paulo,S%C3%A3o%20Paulo,,,,,city,BR%3ESao%20Paulo%3ENULL%3ESao%20Paulo,-23.555771,-46.639557,&tipos=apartamento_residencial&pagina=2