Fazendo Scraping com Laravel.

Fazendo Scraping com Laravel.

  28 jul 2020

Neste post iremos criar uma aplicação Laravel e efetuar as configurações necessárias desde a criação do do projeto até a inserção do scraping no banco de dados, feito isto basta concluir o propósito com os dados coletados.

Para iniciar é necessário ter instalado o composer e o php em sua última versão.

Tendo os pré-requisitos execute o comando abaixo:

composer create-project --prefer-dist laravel/laravel Scraping

Para efetuar Scraping nas páginas iremos utilizar o pacote fabpot/goutte efetue os comandos abaixo para efetuar esta instalação.

composer require fabpot/goutte

Para facilitar nosso trabalho iremos criar um command utilizando o comando abaixo citado:

php artisan make:command buscarPosts

Este comando irá criar um novo arquivo chamado app/Console/Commands/buscarPosts.php, abra-o e efetue uma alteração na linha 14 no atributo $signature (este atributo é responsável por nomear o comando a ser utilizado no laravel).

 protected $signature = 'scrap:page';

Agora começaremos a codificar nosso scraping, dentro do método handle(), este método é chamado toda vez que o comando ‘scrap:page’ for utilizado, então aqui iremos codificar nossa regra de negócio para buscar o conteúdo da página desejada.

Instâncie o objeto Client() vindo do namespace Goutte\Client, definindo um timeout de 1 minuto para leitura da página conforme linhas abaixo:

use Goutte\Client;
use Symfony\Component\HttpClient\HttpClient;

$client = new Client(HttpClient::create(['timeout' => 60]));

Agora você pode iniciar sua busca por dados de acordo com a página que deseja passando como parâmetro a url raiz do site que deseja navegar como no exemplo:

$crawler = $client->request('GET', 'https://www.mocsolucoes.com.br/');

Busque suas tags html ou filtre por classes e/ou id de suas tags para buscar os valores desejados conforme exemplo, neste iremos buscar todos os títulos com h1 desta página:

$link = $crawler->filter('h1')->each(function ($node) use ($client, $crawler) {
            echo $node->text()."\n";
});

A partir de agora basta executar o comando criado abaixo e você terá em texto todas as tags h1 existentes nesta página.

Comando:

php artisan scrap:page

Segue resultado:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *