Fazendo Scraping com Laravel.
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: