Índice:

Raspagem de dados com um ESP8266 / ESP32: 7 etapas
Raspagem de dados com um ESP8266 / ESP32: 7 etapas

Vídeo: Raspagem de dados com um ESP8266 / ESP32: 7 etapas

Vídeo: Raspagem de dados com um ESP8266 / ESP32: 7 etapas
Vídeo: 1) ESP8266 WIFi Access point - Enviar e Receber Dados - Parte 1 2024, Julho
Anonim
Raspagem de dados com um ESP8266 / ESP32
Raspagem de dados com um ESP8266 / ESP32
Raspagem de dados com um ESP8266 / ESP32
Raspagem de dados com um ESP8266 / ESP32

Você sempre quis obter dados para seus projetos Arduino, mas não há uma API pública para isso? Ou em casos como a API do Instagram, onde o processo de configuração do não é muito conveniente?

Neste Instructable, vamos dar uma olhada em 2 opções diferentes para extrair dados de um site para seus projetos ESP8266 ou ESP32.

Etapa 1: Confira o vídeo

Image
Image

Eu fiz um vídeo que cobre a mesma coisa que este instrutível, então se você estiver interessado, dê uma olhada!

Etapa 2: antes de começar

Antes de começarmos
Antes de começarmos
Antes de começarmos
Antes de começarmos

Informamos que os dados de que falarei sobre a extração são dados públicos e não requerem autenticação. Digamos, por exemplo, que minha contagem exata de assinantes do YouTube esteja disponível apenas para mim dentro do estúdio de criação, então o dispositivo teria que fazer uma solicitação autenticada como eu para carregá-lo. Esses tipos de solicitações estarão fora do escopo deste vídeo. Um teste rápido para verificar se isso seria coberto é tentar carregar a página em uma janela anônima, pois isso não fará o login automático em nenhum site.

Para as técnicas abordadas neste Instructable, teremos que usar algumas das ferramentas de desenvolvedor que estão disponíveis nos navegadores. Vou demonstrá-los com o Firefox, mas sei que, com certeza, o Chrome tem ferramentas semelhantes e tenho certeza de que outros navegadores também as têm.

Etapa 3: APIs não públicas (spoiler: Instructables Has One!)

A primeira maneira que veremos é usando uma API não pública. Isso nem sempre estará disponível, mas se estiver, é definitivamente o método que você deve usar. O que estou chamando de "API não pública" é basicamente quando um site usa uma API não anunciada em seu site nos bastidores para buscar os dados que estamos procurando.

Existem alguns motivos pelos quais essa seria a opção preferencial de uso.

  1. A maior vantagem é que é improvável que mude com a mesma frequência que uma página da web, se você extrair dados diretamente do HTML da página da web, toda vez que eles fizerem uma alteração no site, sua análise poderá falhar.
  2. Normalmente é mais eficiente em termos de dados. Quando você está copiando uma página da web, basicamente está baixando toda a página HTML para extrair informações dela, as APIs retornarão apenas pontos de dados, portanto, normalmente seriam solicitações muito menores.
  3. Geralmente é mais fácil de analisar. Normalmente, as APIs retornam dados no formato JSON, que é simples de analisar. Isso é especialmente verdadeiro se você estiver extraindo vários dados.

Primeiro, temos que descobrir se a página da web usa uma configuração como esta. A maior dica é se o site atualiza o valor em tempo real como no Kickstarter, mas mesmo que não atualize, ainda há esperança de que ele possa usar essa configuração. Instructables usa uma API não pública para buscar alguns dados para seu site, embora não seja atualizado em tempo real.

Para verificar se o site está usando essa configuração, entre no modo de desenvolvedor do seu navegador, acho que a maneira mais fácil de fazer isso é clicar com o botão direito na página e selecionar “inspecionar elemento”.

Em seguida, você vai querer ir para a guia de rede, isso exibirá as solicitações que a página da web faz em segundo plano. Observe que pode ser necessário recarregar a página depois de abrir essa guia porque ela só mostrará as solicitações feitas a partir de agora.

Você normalmente deseja procurar aqueles com o tipo “json”. Pode haver muitos pedidos aqui, então pode ajudar a classificar por tipo. Você pode ver que é muito óbvio na página da campanha do kickstarter que está usando essa configuração, pois você pode ver as solicitações constantes sendo feitas para um endpoint "stats.json". Na página de autores do Instructables (por exemplo, o meu é "https://www.instructables.com/member/witnessmenow/"), eles não fazem solicitações constantes, mas você pode ver oculto entre os outros uma solicitação para o endpoint “showAuthorStats”.

Para saber mais informações sobre este pedido, você pode clicar nele. Você deve conseguir todas as informações de que precisa aqui para replicar a solicitação. Mas antes de fazer isso, você deve primeiro verificar se ele contém os dados desejados. Clique em, na guia de resposta e veja se os dados estão lá.

Se contiver os dados de que você precisa, está tudo pronto! Você pode então usar as mesmas abordagens discutidas em meu vídeo anterior sobre conexão com APIs. A versão resumida disso é garantir que a solicitação funcione conforme o esperado em uma ferramenta como o Postman primeiro e, em seguida, use este projeto de exemplo para testar se ela funciona no seu dispositivo.

Para analisar os dados JSON, eu recomendaria usar ArudinoJSON na maioria dos cenários, se isso é algo sobre o qual você gostaria de receber instruções, deixe-me saber!

Etapa 4: coleta de dados diretamente

Extração de dados diretamente
Extração de dados diretamente
Extração de dados diretamente
Extração de dados diretamente
Extração de dados diretamente
Extração de dados diretamente

A seguir, veremos como extrair os dados diretamente da página da web, isso é solicitar a página da web completa no dispositivo e analisar os dados que desejamos. Já mencionei as vantagens que a API não pública tem sobre esse método, mas às vezes precisa sim!

Uma coisa que é importante observar aqui, se você está familiarizado com o desenvolvimento da web, pode estar acostumado a usar o recurso de inspecionar elemento para descobrir informações sobre um elemento específico e como ele é estruturado. Isso deve ser evitado para essa abordagem, porque as páginas da web modernas geralmente são alteradas dinamicamente usando Javascript, o que não acontecerá no seu dispositivo. O código HTML que está disponível em seu dispositivo será apenas a página da web original que foi baixada. Um bom exemplo disso é a página TeamTrees, a contagem atual de doações começa como 0 e é carregada na página mais tarde com esta animação, mas ao contrário dos dois exemplos que vimos antes, ela não carrega os dados em segundo plano, então os dados corretos devem estar em outro lugar.

Para visualizar o código da página da web original, você pode clicar com o botão direito na página e selecionar “Exibir código-fonte”. Em seguida, você deseja pesquisar os dados específicos que deseja, portanto, no exemplo TeamTrees, quando pesquisamos a contagem atual de doações, podemos ver que a contagem real está armazenada na propriedade data-count do elemento count, é aqui que precisamos raspe os dados de.

Você precisa encontrar uma string de pesquisa que leve você aos seus dados. É muito mais fácil descobrir isso antes de codificar para o dispositivo. Para este exemplo, pesquisar por “contagem de dados \””me leva diretamente aos dados que desejamos, o que é perfeito. Não precisamos nos preocupar se ele também corresponderá em outros lugares da página, porque ele atingirá o primeiro lugar primeiro. Se você precisar acertar o terceiro, pode simplesmente programá-lo para ignorar os 2 primeiros acertados.

Se dermos uma olhada no exemplo TeamTrees, como antes, pulamos os cabeçalhos de resposta e agora estamos olhando para o corpo da resposta (que é a página da web). O que volta do cliente é um fluxo de dados. Não nos importamos com nada até nossa consulta de pesquisa, então fazemos um client.find. Se ele encontrar a consulta de pesquisa, ele retornará verdadeiro e moverá o fluxo para o final da consulta. A próxima coisa disponível no fluxo serão os dados que estamos procurando, mas neste caso não temos certeza de quanto tempo os dados serão, mas sabemos que são todas as informações entre nosso local atual no fluxo e a próxima vírgula invertida. Podemos fazer isso usando “client.readBytesUntil“que faz o que diz, lê os bytes em um buffer até atingir a consulta especificada. Apenas certifique-se de que o buffer que você está lendo seja grande o suficiente para conter todos os dados, acho que estamos bem seguros aqui com 32!

Se você tem todos os dados de que precisa, não precisa ler mais dados. Não fechei a conexão aqui porque não parecia causar um problema no ESP8266, parecia causar problemas com o ESP32, então adicionei um client.stop (). Para ser completamente honesto, não sei por que coloquei isso no topo do método, acho que faria mais sentido fechá-lo assim que tiver os dados que deseja.

Etapa 5: coleta de dados usando um servidor externo:

Extração de dados usando um servidor externo
Extração de dados usando um servidor externo
Extração de dados usando um servidor externo
Extração de dados usando um servidor externo

Apenas um outro tópico para tocar, existem ferramentas muito melhores para análise em ambientes regulares baseados em computador, como NodeJS, do que em um microcontrolador, então às vezes pode fazer sentido criar um serviço que busca os dados de uma página da web e fornece uma ponto de extremidade para o ESP8266 ou ESP32. Um exemplo disso foi copiar a página CrowdSupply para obter uma contagem ao vivo de quantos TinyPICO foram vendidos. Pode ter sido possível alcançá-lo diretamente em um ESP8266 ou ESP32, mas como ele estava analisando vários pontos de dados diferentes em vários elementos diferentes, então teria sido complicado.

Acabei criando um projeto NodeJS e analisei os dados usando uma biblioteca chamada cheerio e funcionou muito bem. Hospedei este projeto em um servidor em nuvem que já tinha, mas você poderia executar esse tipo de projeto em um pi se não tivesse algo parecido com essa configuração.

Etapa 6: Limites de uso

Limites de uso
Limites de uso

Uma coisa que pode impactar potencialmente todas essas abordagens é atingir os limites de uso dos sites. Em APIs regulares, normalmente é muito bem documentado quantas solicitações você pode fazer por minuto ou por dia e você pode limitar as solicitações de seus projetos com base nisso. Quando você está raspando, você não sabe quais são esses limites, então corre o risco de acertá-los e potencialmente ser bloqueado. Eu não posso dar nenhum conselho exato sobre como limitá-lo para que você permaneça em seus bons livros, mas eu acho que qualquer coisa abaixo de cada minuto seria muito frequente, exceto talvez casos como o kickstarter onde eles próprios parecem fazer solicitações a cada poucos segundos.

Etapa 7: Obrigado pela leitura

Esperançosamente, este vídeo ajudou se você estiver interessado em analisar dados diretamente de páginas da web em seu ESP8266 ou ESP32. Você tem alguma outra pergunta sobre o assunto que não abordei? Por favor, deixe-me saber nos comentários abaixo, ou junte-se a mim e a um monte de outros criadores no meu servidor Discord, onde podemos discutir este tópico ou qualquer outro relacionado com o criador que você tenha. As pessoas são realmente úteis lá, então é um ótimo lugar para ficar Fora

Eu também gostaria de agradecer muito aos meus patrocinadores do Github que ajudam a apoiar o que eu faço. Eu realmente aprecio isso. Se você não sabe, o Github está combinando patrocínios para o primeiro ano, então, se você fizer um patrocínio, eles irão combiná-lo 100% nos próximos meses.

Obrigado por ler!

Recomendado: