Acessar o iCarros e capturar os dados da "ficha técnica" de cada veículo.
Exemplo:
- Acessar https://www.icarros.com.br/catalogo/fichatecnica.jsp?modelo=214&anomodelo=2017&versao=26876
- Capturar e categorizar as informações da ficha técnica
- Continuar o crawler (...)
Dentro do site há um formulário (#versaoForm
) que exibe todos os ids que vamos precisar pro crawler continuar vasculhando outras páginas:
<form id="versaoForm" action="/catalogo/fichatecnica.jsp" method="GET">
<input type="hidden" name="modelo" value="214">
<input type="hidden" name="anomodelo" value="2017">
<select name="versao">
<option value="26876">Palio Fire 1.0 8V (Flex) 4p</option>
<option value="26884">Palio Fire Way 1.0 8V (Flex)</option>
<option value="26393">Palio Attractive 1.0 Evo (Flex)</option>
<option value="26394">Palio Attractive 1.4 Evo (Flex)</option>
<option value="26395">Palio Essence 1.6 16V (Flex)</option>
<option value="26396">Palio Sporting 1.6 16V (Flex)</option>
</select>
<button type="submit">Alterar versão</button>
</form>
Além disso, também facilitam a separação de marca, modelo e ano no h1
:
<h1>
<span class="makeName">Fiat</span>
<span class="modelName">Palio</span>
<span class="modelYear">2017</span>
</h1>
Como as mudanças no setor automotivo acontecem 1 ou 2 vezes por ano, não é necessário que o sistema capture tudo de uma vez. Até seria bom que ele rodasse "mais lento" pra não levantar flag lá no servidor deles. Talvez a melhor forma seria ir "de marca em marca", ao invés de tentar capturar o site inteiro de uma vez.
Indo na página inicial do Catálogo iCarros dá pra pegar todas as Marcas e Modelos disponíveis: https://www.icarros.com.br/catalogo/index.jsp
Por exemplo, Fiat é marca=14
e Palio é modelo=214
O resultado deve ser guardado de forma similar a:
{
"marca": "Fiat",
"modelo": "Palio",
"ano": 2017,
"versao": "Palio Fire 1.0 8V (Flex) 4p",
"created_at": "2019-10-23 14:10",
"last_update": "2019-10-23 14:10",
"data": {
"motor": "1.0",
"transmissao": "manual de 5 marchas",
"tracao": "dianteira",
"direcao": "Mecânica",
"suspensao_dianteira": "Suspensão tipo McPherson, roda tipo independente e molas helicoidal.",
"suspensao_traseira": "Suspensão tipo eixo de torção e traseira com barra estabilizadora, roda tipo independente e molas helicoidal.",
"freios": "Dois freios à disco com dois discos ventilados.",
"combustivel": {
"0": {
"nome": "Álcool",
"potencia": 75,
"torque": 9.9,
"velocidade_maxima": 157,
"tempo_0-100": 15.2,
"consumo": {
"cidade": 8.7,
"estrada": 10.4
}
},
"1": {
"nome": "Gasolina",
"potencia": 73,
"torque": 9.5,
"velocidade_maxima": 156,
"tempo_0-100": null,
"consumo": {
"cidade": 12.2,
"estrada": 15.3
}
}
},
"dimensoes": {
"altura": 1433,
"largura": 1634,
"comprimento": 3.827,
"peso": 940,
"tanque": 48,
"entre-eixos": 2373,
"porta-malas": 290,
"ocupantes": 5
}
},
"unidades": {
"potencia": "cv",
"torque": "kgf.m",
"velocidade": "km/h",
"tempo_0-100": "s",
"consumo": "km/l",
"alt-larg-comp": "mm",
"tanque": "L",
"entre-eixos": "mm",
"porta-malas": "L"
}
}
- Provavelmente a parte relacionada aos combustíveis vai ser a mais chata, porque há diferentes dados para "álcool" e "gasolina". (Ah, e às vezes pode ser outro combustível, como "Híbrido/Elétrico")
- O iCarros traz os números com vírgulas, mas devemos transformar em números com pontos, conforme exemplo acima
- Quando o iCarros não tem a informação, exibem "N/D", devemos salvar como "null"
- No exemplo acima, omiti as outras tabelas ("Segurança", "Conforto", etc), pois todos os itens são apenas true/false. (Aliás, observar que quando é true eles mostram o ícone
fa-check-circle
e quando é false mostramfa-times-circle
) - O exemplo é um JSON só pra facilitar a visualização. Precisa ser guardado em banco de dados.
Caso o crawler passe mais de uma vez pela mesma página, ele deve verificar se já existe registro no banco de dados para aquele respectivo carro. Se já tiver registro, deve verificar o last_update
. Se last_update
for mais antigo do que 1 mês, deve ATUALIZAR as informações, caso estejam diferentes. Caso o last_update
seja mais recente do que 1 mês, simplesmente ignora.