Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Meu código não traz retorno

Realizei da mesma forma ensinada pelo instrutor Vinícius, porém observei que o site da Alura passou por mudanças e o elemento SPAN como ensinado já não existe mais. Tentei pegar o do novo site mas não obtive sucesso:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Não seria esses elementos ou a forma que o site está disposto hoje em dia não é mais possivel o acesso?
No caso da segunda opção teria alguma sugestão de outra página para testar meu código?

Atenciosamente Giusephe Oliveira.

1 resposta
solução!

Oi!

Sim pelo print dá para ver que a estrutura da página da Alura mudou, então o seletor usado na aula (span.card-curso__nome) não funciona mais.

Na versão atual da página, o nome do curso está dentro de um h3, e não naquele span. A própria página atual da Alura ainda lista os cursos normalmente, inclusive os cursos de PHP.

No seu print, por exemplo, aparece algo semelhante a:

<h3 class="line-clamp-2 font-family-1 text-heading-01 ...">
    PHP: conceitos, lidando com dados, loops e mais
</h3>

O que mudar no seu código

Se você está usando o DomCrawler, experimente trocar:

$cursos = $crawler->filter('span.card-curso__nome');

por:

$cursos = $crawler->filter('h3');

E mantenha o foreach:

foreach ($cursos as $curso) {
    echo $curso->textContent . PHP_EOL;
}

Porém, eu não recomendaria simplesmente usar h3, porque isso pode capturar outros títulos da página além dos cursos.

Uma alternativa melhor é usar uma classe mais específica do elemento que contém o título. Pelo HTML mostrado no seu DevTools, o h3 possui a classe line-clamp-2. Então você poderia testar:

$cursos = $crawler->filter('h3.line-clamp-2');

foreach ($cursos as $curso) {
    echo trim($curso->textContent) . PHP_EOL;
}

Mas há um detalhe importante:

Se mesmo com h3 não aparecer nada, o problema provavelmente não é mais o seletor.

Isso acontece porque você está fazendo uma requisição HTTP com o Guzzle e tentando analisar o HTML retornado pelo servidor. O que aparece no DevTools do Chrome pode não ser exatamente o mesmo HTML que o Guzzle recebe.

Eu faria este teste antes de qualquer coisa:

$html = $resposta->getBody();

file_put_contents('pagina.html', $html);

echo strlen($html);

Execute:

php buscar-cursos.php

Se aparecer um número grande, abra o arquivo pagina.html no navegador e procure por:

PHP: conceitos

Se não encontrar, significa que o conteúdo dos cards está sendo montado/alterado posteriormente pelo JavaScript, e aí o DomCrawler não vai enxergar esses elementos simplesmente trocando o seletor.

Isso é especialmente importante porque o site atual da Alura passou por mudanças recentes, a página de cursos que consultei atualmente apresenta uma estrutura diferente da utilizada nos exemplos antigos do curso.