3
respostas

findAll() não retorna as ocorrências corretamente

Estou testando extrair nomes das pessoas que aparecerem dentro de uma busca no Linkedin. Esses nomes encontram-se dentro de uma tag span, conforme esse exemplo:

<span class="name actor-name">Aline Gobbi</span>

Porém, ao fazer a busca, não são retornados esses elementos span que contem os nomes.

Invés disso, obtenho esse retorno:

[<span class="li-name">LinkedIn</span>,
 <span class="fill-v2" id="submit-join-form-text">Agree &amp; Join</span>,
 <span class="line-wrapper"><span class="line"></span></span>,
 <span class="line"></span>,
 <span class="content"><span>or</span></span>,
 <span>or</span>,
 <span class="fb-btn-content">Continue with Facebook</span>,
 <span aria-hidden="true" class="glyph"></span>,
 <span class="screen-reader-text">Close</span>,
 <span class="contacts-info">Use your Gmail contacts to find people you know on LinkedIn. You choose when and who to connect to.</span>,
 <span aria-hidden="true" class="glyph"></span>,
 <span class="screen-reader-text">Information</span>]

Código utilizado:

url = 'https://www.linkedin.com/search/results/people/?keywords=gerente&origin=SWITCH_SEARCH_VERTICAL'

pagina = urlopen(url).read()

pagina = BeautifulSoup(pagina, 'html.parser')

pagina.findAll('span')

Qual seria a explicação para esse comportamento?

3 respostas

Olá Andre,

Acredito que o motivo seja que essa é uma página protegida do Linkedin, e você precisa fazer login antes de acessar.

Assim essa lista que você está recebendo de retorno são todos os spans da página de login, pois ao tentar acessar essa página sem estar logado você é redirecionado para a página de login.

Oi, Lucas. Eu estava logado, mas mesmo assim o retorno foi esse, como se eu não estivesse...

Mesmo estando logado no seu navegador o python não vai reconhecer, porque o urlopen não utiliza o seu navegador para acessar a página.

Fazendo uma comparação, é como se o python utilizasse um novo navegador anônimo toda vez que você executa o código.

Então para acessar uma página como essa que você quer seria um código um pouco mais complicado, tem que usar algo para acessar a página de login e salvar o login na sessão, e a partir dessa sessão fazer o acesso à página protegida.

Ainda surge outra complicação, atualmente o linkedin utiliza js para carregar o conteúdo da página, e um simples urlopen não consegue interpretar isso, é preciso utilizar algo como o selenium para simular um navegador mais completo e executar o javascript para carregar o conteúdo. Você pode testar isso desativando o javascript e abrindo a página.

Para trabalhar apenas com sessões, no caso de precisarmos de um login simples o requests.session() pode ajudar, e já no caso de uma página que depende de javascript já precisamos utilizar algo bem mais completo como o selenium.