Estava procurando um produto específico no OLX, e diariamente acessava minhas buscas salvas no aplicativo à procura de uma boa oportunidade. Um dia encontrei uma ótima oportunidade, mas quando entrei em contato com o vendedor já era tarde, ele já estava indo ao encontro do comprador e caso a a venda não desse certo tinham mais 3 pessoas na espera para comprar.
Vi nessa situação uma oportunidade para aprender um pouco sobre scrapping usando o nodejs
para tentar não perder uma próxima oportunidade. Espero que você também consiga o mesmo.
Para utilizar esse script você precisa ter o node
e o npm
devidamente instalados, ter uma conta no Telegram, e idealmente um computador que fique ligado 27/7 para executar o script continuamente. Eu usei um Raspberry Pi 2 que consome pouca energia e já uso para outros fins, mas você pode usar um VPS, ou um sevidor gratuito da Oracle.
Se você já está familiarizado com a API do Telegram e já mexeu bom bots segue um passo-a-passo mais enxuto:
git clone https://github.com/carmolim/olx-monitor.git
cd src
npm install
example.env
para .env
e incluir as informações do seu BOT e do seu grupo que irá receber as notificaçõesconfig.js
config.js
node index.js
data
: ads.db
que é o banco de dados e o scrapper.log
com os logs de execução do scriptSe você quiser utiliar o Docker para não ter que instalar o Node e nem as dependências diretamente na sua máquina siga os seguintes passos
docker-compose build
docker-compose up
Para você poder receber as notificações pelo Telegram você precisa ter algumas coisas, um bot que terá um token e um grupo que tenho bot com que você irá criar como participante.
Para conseguir o seu token você precisa criar o seu próprio bot. Eu pretendo fazer um tutorial, mas enquanto isso você pode usar esse aqui. O vídeo é longo mas você só precisa assistir até: 3:24. Com esse vídeo você irá conseguir obter o seu token.
Depois de criar o seu bot, crie um grupo e convite o seu bot que você acabou de criar e també um outro bot, o @idbot
, ele vai te ajudar a descobrir o CHAT_ID
que precisamos para enviar a notificação.
Depois de incluir o no grupo, basta digitar /getgroupid@myidbot
e bot irá responder com o ID do chat.
Dentro do repositório tem um arquivo chamado example.env
, você precisa renomea-lo para apenas .env
e preencher as informações que você acabou de pegar.
Variável | Exemplo |
---|---|
TELEGRAM_TOKEN | Token do seu bot gerado pelo BotFather |
TELEGRAM_CHAT_ID | ID do seu chat |
Eu não sei o que você está procurando no OLX, mas você precisa dizer para o script. A forma mais fácil de fazer isso é entrar no site do OLX, fazer uma busca, colocar os filtros que você acha necessário e copiar o endereço que o OLX vai criar.
Recomendo utilizar filtros bem específicos para não gerar resultados com muitos itens. Como esse script irá varrer todos os resultados encontrados, pode ser possível que não seja possível passar por todos os resultados dentro do intervalo definido, isso pode fazer com que o Olx perceba uma quantidade alta de chamadas do seu IP e faça algum bloqueio. Isso nunca me aconteceu, mas pode acontecer.
Você pode utilizar uma ou mais pesquisas, basta apenas incluir as URLs
no arquivo config.js
dentro da variável URLs
URL
config.urls = ['https://sp.olx.com.br/sao-paulo-e-regiao/centro/celulares/iphone?cond=1&cond=2&pe=1600&ps=600&q=iphone']
URLs
Para usar várias URLs
você só precisa separa-las por vírgula.
config.urls = [
'https://sp.olx.com.br/sao-paulo-e-regiao/centro/celulares/iphone?cond=1&cond=2&pe=1600&ps=600&q=iphone',
'https://sp.olx.com.br/sao-paulo-e-regiao/imoveis/venda?bae=2&bas=1&gsp=1&pe=600000&ps=100000&se=6&ss=2',
]
Quando mais específica sua busca for mais eficiente o script será, se você só buscar por iPhone, no Brasil todo, você vai receber muitas notificações por dia, não vai ser muito legal.
O funcionamamento do script é simples. Ele percorre um array
de URLs
copiadas do OLX, que já contém os filtros de preço mínimo, máximo e etc, encontra os anúncios dentro dessa página e inclui os anúncios encontrados em um banco de dados SQLite e também envia uma notificação para um BOT no Telegram.
As entradas salvas no banco de dados são utilizadas posteriormente para detectar alterações nos preços, que também são notificadas através do Telegram.
Scraper.js