Logando com o Scrapy FormRequest

Neste tutorial, você vai aprender como logar em site que requerem um usuário e uma senha antes de mostrar páginas específicas.

Autor: Lazar Telebak (English Version) • Tradução: Lucas Maekawa

Se você é novo no Scrapy, certifique-se de acessar o tutorial de Scrapy para aprender como criar um projeto e um crawler e também a extrair páginas web.

Neste tutorial, vamos utilizar este site: quotes.toscrape.com (um site de demonstração que foi criado com fins de aprendizado). Como você pode verificar, todas as páginas do site contém o botão de Login, que nos direciona para a página /login. Nesta página, você pode digitar qualquer combinação de usuário e senha e pressionar o botão Login para ser redirecionado para a página inicial, que agora conta com o botão Logout, que indica que você está logado.

Em um site real, após realizar o login, você conseguirá encontrar vários pontos de dados e URLs que você não tem acesso sem estar logado, mas como este é um site de demonstração, não há tudo isso.

Analisando a Requisição de Login

Agora, vamos começar para ver como logar utilizando o Scrapy. Primeiramente, certifique-se de que você não está logado, abra a página Login no seu navegador, Chrome ou Firefox, clique na página com o botão direito, selecione “Inspect” e vá para a aba “Network”, onde você pode analisar o tráfego e ver quais URLs o servidor está requisitando durante o login.

Neste caso, temos duas requisições, o POST e o GET. Após clicar no Login, o método POST vai estar acompanhado do status 302, que quer dizer que você foi redirecionado da página de login para outra página. Aqui está uma captura de tela do Chrome:

 

Clicando nessa requisição, você encontrará várias abas, entre elas a aba “Headers”, que é a que você precisa. Role para baixo até encontrar a seção “Form Data”, onde há três argumentos importantes (em outros sites, pode haver outros argumentos). O primeiro deles é o “csrf_token” que é um token que muda dinamicamente, e uma combinação de “username” e “password”.

Editando Seu Código Scrapy

Voltando para o seu código, o que precisa ser adicionado é um submódulo do Scrapy chamado FormRequest. Então no começo do seu código digite:

 

e substituia o parâmetro de start_urls para:

 

Adicione seu código de login para a função parse(). Neste caso, o token csrf_token vai mudar automaticamente se você atualizar a página. Então você precisa primeiro extrair o valor do csrf_token do código-fonte da página. Para fazer isso, use “Inspect” na página quotes.toscrape.com/login e você vai achar um input com o nome csrf_token.

 

Este seletor Xpath vai selecionar todo nó HTML cujo atributo name seja igual a csrf_token e extrair a primeira instância desse nó. Como você só tem uma instância, ele vai retornar o token que você precisa.

 

Então, para outros sites, você pode apenas copiar os argumentos do “Form Data” (como mostrado nas capturas de tela acima), e se você encontrar algum dos detalhes mudando, tente inspecionar a página para achar o que muda e extraia ele para uma variável.

Então use o return FormRequest incluindo os detalhes de login e também o nome da função de callback que vai determinar o que você quer extrair da página para qual você será redirecionado após o login; aqui vamos chamar de scrape_pages, por exemplo. Então sua função parse vai parecer assim:

 

Testando Seu Código de Login Scrapy

Se você quiser testar seu código, você pode adicionar a seguinte linha no começo do seu código:

 

e, no começo da função scrape_pages() adicione esta linha, que vai abrir no navegador o site que você está extraindo, mais precisamente a página que você vai ser redirecionado depois do login:

 

Na mesma função scrape_pages() complete o código que vai extrair as páginas após o login.

Finalmente, abra o Terminal ou o Prompt de Comando e use o seguinte comando para rodar o spider; certifique-se de substituir o “quotes” com o nome do seu spider se ele for diferente.

 

Se tudo estiver certo, uma página vai abrir no seu navegador mostrando o que seu programa está extraindo. Neste exemplo, ele vai mostrar a página inicial do site demo, incluindo um botão Logout no topo, que significa que você conseguiu se logar.

Código Final

Isto é tudo para este tutorial de login com Scrapy, e aqui está o código completo:

 

Você também pode baixar o código do Github.

 

Se você tem alguma dúvida, sinta-se a vontade para enviá-las abaixo nos comentários.

Curso Compreensivo de Scrapy

Este tutorial é parte do nosso curso compreensivo online:  Scrapy, Powerful Web Scraping & Crawling with Python – ganhe 90% de desconto usando este cupom.

 

Share this:
No votes yet.
Please wait...

Leave a Reply