Tutoriais de web scraping foram cobertos no passado, portanto, este tutorial cobre apenas o aspecto de obter acesso a sites fazendo login com código em vez de manualmente usando o navegador.
Para entender este tutorial e ser capaz de escrever scripts para fazer login em sites, você precisa de algum conhecimento de HTML. Talvez não o suficiente para construir sites incríveis, mas o suficiente para entender a estrutura de uma página da web básica.
Isso seria feito com as bibliotecas Requests e BeautifulSoup Python. Além dessas bibliotecas Python, você precisaria de um bom navegador, como Google Chrome ou Mozilla Firefox, pois eles seriam importantes para uma análise inicial antes de escrever o código.
As bibliotecas Requests e BeautifulSoup podem ser instaladas com o comando pip a partir do terminal, conforme mostrado abaixo:
pedidos de instalação de pip
pip instalar BeautifulSoup4
Para confirmar o sucesso da instalação, ative o shell interativo do Python, que é feito digitando Pitão no terminal.
Em seguida, importe as duas bibliotecas:
importarsolicitações de
a partir debs4importarBeautifulSoup
A importação é bem-sucedida se não houver erros.
O processo
O login em um site com scripts requer conhecimento de HTML e uma ideia de como a web funciona. Vejamos rapidamente como a web funciona.
Os sites são compostos por duas partes principais, o lado do cliente e o lado do servidor. O lado do cliente é a parte de um site com o qual o usuário interage, enquanto o lado do servidor é a parte do site onde a lógica de negócios e outras operações do servidor, como acessar o banco de dados, são executadas.
Ao tentar abrir um site por meio de seu link, você está solicitando ao servidor que busque os arquivos HTML e outros arquivos estáticos, como CSS e JavaScript. Essa solicitação é conhecida como solicitação GET. No entanto, quando você está preenchendo um formulário, enviando um arquivo de mídia ou um documento, criando uma postagem e clicando, digamos, em um botão de envio, você está enviando informações para o servidor. Essa solicitação é conhecida como solicitação POST.
A compreensão desses dois conceitos seria importante ao escrever nosso script.
Inspecionando o site
Para praticar os conceitos deste artigo, estaríamos usando o Cotações para raspar local na rede Internet.
O login em sites requer informações como nome de usuário e senha.
No entanto, como este site é usado apenas como uma prova de conceito, vale tudo. Portanto, estaríamos usando admin como o nome de usuário e 12345 como a senha.
Em primeiro lugar, é importante visualizar o código-fonte da página, pois isso forneceria uma visão geral da estrutura da página da web. Isso pode ser feito clicando com o botão direito do mouse na página da web e clicando em Exibir código-fonte da página. Em seguida, você inspeciona o formulário de login. Você faz isso clicando com o botão direito em uma das caixas de login e clicando em inspecionar elemento . Ao inspecionar o elemento, você deve ver entrada tags e, em seguida, um pai Formato tag em algum lugar acima dela. Isso mostra que os logins são basicamente formulários sendo PUBLICAR ed para o lado do servidor do site.
Agora, observe o nome atributo das marcas de entrada para as caixas de nome de usuário e senha, eles seriam necessários ao escrever o código. Para este site, o nome atributo para o nome de usuário e a senha são nome do usuário e senha respectivamente.
A seguir, temos que saber se existem outros parâmetros que seriam importantes para o login. Vamos explicar isso rapidamente. Para aumentar a segurança dos sites, geralmente são gerados tokens para evitar ataques de falsificação de site cruzado.
Portanto, se esses tokens não forem adicionados à solicitação POST, o login falhará. Então, como sabemos sobre esses parâmetros?
Precisaríamos usar a guia Rede. Para obter esta guia no Google Chrome ou Mozilla Firefox, abra as Ferramentas do desenvolvedor e clique na guia Rede.
Quando estiver na guia de rede, tente atualizar a página atual e você notará solicitações chegando. Você deve tentar ficar atento às solicitações POST enviadas quando tentamos fazer login.
Aqui está o que faríamos a seguir, enquanto mantemos a guia Rede aberta. Insira os detalhes de login e tente fazer o login, a primeira solicitação que você verá deve ser a solicitação POST.
Clique na solicitação POST e visualize os parâmetros do formulário. Você notaria que o site tem um csrf_token parâmetro com um valor. Esse valor é um valor dinâmico, portanto, precisaríamos capturar esses valores usando o PEGUE solicitar primeiro antes de usar o PUBLICAR solicitar.
Para outros sites em que estaria trabalhando, provavelmente não verá o csrf_token mas pode haver outros tokens gerados dinamicamente. Com o tempo, você conheceria melhor os parâmetros que realmente importam ao fazer uma tentativa de login.
O código
Em primeiro lugar, precisamos usar Requests e BeautifulSoup para obter acesso ao conteúdo da página de login.
a partir desolicitações deimportarSessãoa partir debs4importarBeautifulSoupComobs
comSessão() Comos:
local =s.pegue('http://quotes.toscrape.com/login')
imprimir(local.contente)
Isso imprimirá o conteúdo da página de login antes de fazer o login e se você pesquisar a palavra-chave Login. A palavra-chave seria encontrada no conteúdo da página, mostrando que ainda não nos conectamos.
Em seguida, procuraríamos o csrf_token palavra-chave que foi encontrada como um dos parâmetros ao usar a guia rede anteriormente. Se a palavra-chave mostrar uma correspondência com um entrada tag, então o valor pode ser extraído toda vez que você executar o script usando o BeautifulSoup.
a partir desolicitações deimportarSessãoa partir debs4importarBeautifulSoupComobs
comSessão() Comos:
local =s.pegue('http://quotes.toscrape.com/login')
bs_content=bs(local.contente, 'html.parser')
símbolo =bs_content.achar('entrada', {'nome':'csrf_token'})['valor']
login_data= {'nome do usuário':'admin','senha':'12345', 'csrf_token':símbolo}
s.publicar('http://quotes.toscrape.com/login',login_data)
pagina inicial=s.pegue('http://quotes.toscrape.com')
imprimir(pagina inicial.contente)
Isso imprimirá o conteúdo da página após o login e se você pesquisar a palavra-chave de logout. A palavra-chave seria encontrada no conteúdo da página, mostrando que conseguimos fazer o login com sucesso.
Vamos dar uma olhada em cada linha de código.
a partir desolicitações deimportarSessãoa partir debs4importarBeautifulSoupComobs
As linhas de código acima são usadas para importar o objeto Session da biblioteca de solicitações e o objeto BeautifulSoup da biblioteca bs4 usando um alias de bs .
comSessão() Comos:A sessão de solicitações é usada quando você pretende manter o contexto de uma solicitação, para que os cookies e todas as informações dessa sessão de solicitação possam ser armazenados.
bs_content=bs(local.contente, 'html.parser')símbolo =bs_content.achar('entrada', {'nome':'csrf_token'})['valor']
Este código aqui utiliza a biblioteca BeautifulSoup para que o csrf_token pode ser extraído da página da web e, em seguida, atribuído à variável de token. Você pode aprender como extrair dados de nós usando BeautifulSoup.
login_data= {'nome do usuário':'admin','senha':'12345', 'csrf_token':símbolo}s.publicar('http://quotes.toscrape.com/login',login_data)
O código aqui cria um dicionário dos parâmetros a serem usados para o login. As chaves dos dicionários são os nome atributos das tags de entrada e os valores são os valor atributos das tags de entrada.
o publicar método é usado para enviar uma solicitação de postagem com os parâmetros e nos logar.
pagina inicial=s.pegue('http://quotes.toscrape.com')imprimir(pagina inicial.contente)
Após um login, essas linhas de código acima simplesmente extraem as informações da página para mostrar que o login foi bem-sucedido.
Conclusão
O processo de login em sites usando Python é bastante fácil, no entanto, a configuração dos sites não é a mesma, portanto, alguns sites seriam mais difíceis de fazer login do que outros. Há muito mais que pode ser feito para superar quaisquer desafios de login que você tenha.
O mais importante em tudo isso é o conhecimento de HTML, Solicitações, BeautifulSoup e a capacidade de entender as informações obtidas na guia Rede das ferramentas de desenvolvedor do seu navegador da web.