Índice:

Aranha um site Ajax com um formulário de login assíncrono: 6 etapas (com imagens)
Aranha um site Ajax com um formulário de login assíncrono: 6 etapas (com imagens)

Vídeo: Aranha um site Ajax com um formulário de login assíncrono: 6 etapas (com imagens)

Vídeo: Aranha um site Ajax com um formulário de login assíncrono: 6 etapas (com imagens)
Vídeo: E-mails com NodeMailer e Gmail no ☕ Hcode Café #77 2024, Dezembro
Anonim
Aranha um site Ajax com um formulário de login assíncrono
Aranha um site Ajax com um formulário de login assíncrono

O problema: as ferramentas de Spidering não permitem autenticação de login AJAX.

Este instrutível mostrará como fazer o login por meio de um formulário AJAX usando Python e um módulo chamado Mechanize. Spiders são programas de automação da web que estão se tornando uma forma cada vez mais popular para as pessoas coletarem dados online. Eles rastejam pela web reunindo materiais preciosos para abastecer as empresas da web mais poderosas que existem. Outros rastejam e reúnem conjuntos específicos de dados para melhorar a tomada de decisões, deduzir o que está "na moda" ou encontrar as rotas de viagem mais baratas. Spiders (rastreadores da web, webbots ou scrapers de tela) são ótimos para transformar a gosma de HTML em alguma aparência de dados inteligentes, mas temos um problema quando se trata de páginas da web habilitadas para AJAX que têm sessões habilitadas para JavaScript e cookies que não são navegáveis com o normal conjunto de ferramentas de spidering. Neste instrutível estaremos acessando nossa própria página de membro em pubmatic.com. Essas etapas mostrarão um método a seguir, mas sua página será diferente. Divirta-se!

Etapa 1: Reúna os materiais

Reúna materiais
Reúna materiais

Você precisará começar a complementar seus recursos de programação. Você precisará dos seguintes programas. Use seus guias para ajudá-lo a instalar estes… Instalar FirebugÉ um addonInstall PythonIr para: python.orgIr para: python.orgInstalar o Módulo MechanizeGet MechanizeGet MechanizeOutras ferramentas úteis do Spidering: BeautifulSoup

Etapa 2: Encontre os cabeçalhos necessários para criar uma sessão

Uma aranha bem elaborada acessará uma página da web como se fosse um navegador controlado por um ser humano, mantendo ocultas as pistas sobre sua verdadeira origem. Parte da interação entre navegadores e servidores acontece por meio de solicitações GET e POST que podem ser encontradas nos cabeçalhos (essas informações raramente são exibidas em um navegador, mas são muito importantes). Você pode ver algumas dessas informações pressionando Ctrl I (no firefox) para abrir a janela Informações da página. Para se disfarçar como um navegador moderado, você deve se identificar usando as mesmas credenciais. Se você tentasse entrar no pubmatic com o javascript desabilitado em seu navegador, não iria muito longe, pois os redirecionamentos são feitos por javascript. Portanto, considerando que a maioria dos navegadores spider não possui intérpretes javascript, teremos que fazer o login por meio de uma rota alternativa. Vamos começar obtendo as informações do cabeçalho enviadas do navegador quando você clica em enviar. Se este fosse um login de navegador comum, você usaria o Mechanize para preencher o formulário e clicar em enviar. Os formulários de login normais são encapsulados em uma … tag e o Mechanize seria capaz de enviar isso e pesquisar a próxima página sem problemas. Como não temos uma tag de formulário preenchida, a função de envio está sendo controlada por javascript. Vamos verificar a função submitForm do pubmatic. Para fazer isso, primeiro abra a página da web no firefox e ative o firebug clicando no firefly no canto inferior direito. Em seguida, clique na guia de script, copie todo o código que aparecer e cole-o em seu software de edição de texto favorito. Em seguida, você pode excluir todo o código, exceto a função submitForm. Ele começa com a função "submitForm (theform) {" e tudo entre isso e as funções que fecham a chave "}". Ao analisar essa função muito primitivamente, notamos que alguma autenticação acontece trazendo de volta uma variável chamada xmldoc que está sendo analisada como xml. Este é um recurso chave do AJAX, ele pesquisou o servidor e trouxe de volta algum documento XML que contém uma árvore de informações. O nó session_id contém o session_id se a autenticação foi bem sucedida, você pode dizer isso olhando para este trecho de código: "if (session_id! = Null) {// login bem-sucedido". Agora, queremos evitar que esse bit de javascript nos leve a qualquer lugar, para que possamos ver o que está sendo postado no servidor durante a autenticação. Para fazer isso, comentamos todos os redirecionamentos de janela que se parecem com: "window.location =…". Para comentar isso, adicione barras duplas antes delas, como: "//window.location …" isso evita que o código seja executado. Você pode baixar o arquivo Javascript abaixo, que já contém essas edições. Copie e cole esse bit editado de javascript no lado direito da janela do console e clique em executar. Isso substitui a função javascript já na página com nossa nova versão. Agora, quando você preencher suas credenciais e clicar em enviar, deverá ver as informações do cabeçalho POST e GET preencher o console, mas você não irá a lugar algum. As informações do POST são as informações disparadas para o servidor pelas funções AJAX, você deseja ser o máximo assim quanto possível, copie e cole essas informações em um bloco de notas.

Etapa 3: preparar o código

Antes de adicionarmos os novos cabeçalhos que encontramos, vamos criar um código Python de login do Mechanize com modelo. Estamos fazendo isso por dois motivos: primeiro, temos um componente que funciona para adicionar coisas novas e, segundo, para ver como você normalmente faria o login em uma página da web não AJAX. Abra o bloco de notas ou equivalente e copie e cole o Segue. Quando terminar, salve-o como youfilename.py em algum lugar que possa encontrar. #! / Usr / bin / python # - * - coding: utf-8 - * - # Comece com suas importações de módulo: from mechanize import Browser #Create your instância do navegador por meio da chamada de função Browser (); br = Browser () # Configure o navegador de modo que ignore as solicitações spiders.txt # Faça isso com cuidado, se a página da web não gostar de spiders, eles podem ficar chateados se encontrarem você lábr.set_handle_robots (False) #Abra a página que deseja acessar tobr.open ("https://pubmatic.com/04_betasignin.jsp") # Como sei o nome do formulário, posso simplesmente selecionar o formulário pelo nomebr.select_form ("login") # Usando os nomes dos elementos do formulário, eu insiro os nomes dos elementos do formuláriobr ['email'] = "[email protected]" br ['senha'] = "Asquid22" # br.submit () envia o formulário e puxa a página resultante, você cria uma nova instância do navegador # resposta abaixo contém o pageresponse = br.submit () # Isso imprimirá o corpo da página recebida # print response.read ()

Etapa 4: Envie os sinais corretos

Envie os sinais corretos
Envie os sinais corretos

O Mechanize tem uma função fácil de adicionar cabeçalhos aos cabeçalhos POST, isso nos permitirá aparecer no mesmo navegador que você usou para acessar a página pela primeira vez. Abra o arquivo com os cabeçalhos que você encontrou usando o Firebug e edite esse arquivo de texto para corresponder. Substitua tudo nas aspas pelo item adequado da lista de cabeçalhos: USER_AGENT = "Mozilla / 5.0 (X11; U; Linux i686; tr-TR; rv: 1.8.1.9) Gecko / 20071102 Pardus / 2007 Firefox / 2.0.0.9" HOST = "pubmatic.com" ACCEPT = "text / xml, application / xml, application / xhtml + xml, text / html; q = 0,9, texto / simples; q = 0,8, imagem / png, * / *; q = 0,5 "ACCEPT_LANGUAGE =" en-us, en; q = 0,5 "ACCEPT_ENCODING =" gzip, esvaziar "ACCEPT_CHARSET =" ISO-8859-1, utf-8; q = 0,7, *; q = 0,7 "KEEP_ALIVE =" 300 " CONNECTION = "keep-alive" CONTENT_TYPE = "application / x-www-form-urlencoded" REFERER = "https://pubmatic.com/04_betasignin.jsp"CONTENT_LENGTH =" 60 "COOKIE =" utma = 103266945.1970108054.1210113004.1212104087.201; KADUSERCOOKIE = EA2C3249-E822-456E-847A-1FF0D4085A85; utmz = 103266945.1210113004.1.1.utmccn = (direta) | utmcsr = (direta) | utmcmd = (nenhum); JSESSIONID = 60F194BE2A5D31C3E8618995EB82C3C1. TomcatTwo; UTMC = 103266945 "PRAGMA =" no-cache "CACHE_CONTROL =" no-cache "Isso cria um conjunto de variáveis que você pode usar para anexar ao cabeçalho ing este código: br.add_header = [("Host", HOST)] br.add_headers = [("User-agent", USER_AGENT)] br.add_headers = [("Aceitar", ACCEPT)] br.add_header = [("Accept-Language", ACCEPT_LANGUAGE)] br.add_headers = [("Accept-Encoding", ACCEPT_ENCODING)] br.add_headers = [("Accept-Charset", ACCEPT_CHARSET)] br.add_header = [("Keep-Alive ", KEEP_ALIVE)] br.add_headers = [(" Connection ", CONNECTION)] br.add_header = [(" Content-Type ", CONTENT_TYPE)] br.add_header = [(" Referer ", REFERER)] br.add_header = [("Comprimento do conteúdo", CONTENT_LENGTH)] br.add_headers = [("Cookie", COOKIE)] br.add_headers = [("Pragma", PRAGMA)] br.add_headers = [("Cache-Control", CACHE_CONTROL)] Agora, quando chamarmos a função de abertura de página, os cabeçalhos também serão enviados para o servidor. br.open ("https://pubmatic.com/04_betasignin.jsp")

Etapa 5: Cookies mecanizados

Cookies mecanizados
Cookies mecanizados

Esta etapa ocorre porque mecanizar automatiza o manuseio de cookies, mas é importante saber o que está acontecendo:

Quando o formulário é enviado, você tem os cabeçalhos corretos, como se tivesse enviado usando a função javascript. O servidor então autentica essas informações e gera um ID de sessão e o salva em um cookie se o nome de usuário e a senha estiverem corretos. A boa notícia é que o Mechanize come e regurgita cookies automaticamente, então você não precisa se preocupar com o envio e recebimento de cookies. Assim, depois de criar um ID de sessão que funcione, você poderá entrar na seção exclusiva para membros do site.

Etapa 6: Chave para o coração

Agora que adquirimos um ID de sessão e o Mechanize o salvou em seus cookies, podemos seguir o javascript para ver aonde precisamos ir. Olhando dentro de "if (session_id! = Null) {// login bem-sucedido" para ver onde ir em caso de sucesso. Olhando para o código de realocação da janela: "if (adurlbase.search (/pubmatic.com/)! = -1) {window.location =" https://pubmatic.com/05_homeloggedin.jsp "+"? V = "+ Math.random () * 10000; " vemos que precisamos ir a um site localizado em https://pubmatic.com/05_homeloggedin.jsp?v=algum número aleatório. Então, vamos apenas criar um número aleatório falso para inserir e criar uma nova instância do navegador para ler a página recém-aberta: response2 = br.open ("https://pubmatic.com/05_homeloggedin.jsp?v=2703") E isso deve seja isso. Seu código agora está completo, usando os cabeçalhos adequados e o manipulador de cookies mecanizado, podemos agora acessar as entranhas do pubmatic. Abra o terminal, carregue o pacote python abaixo e faça o login. Para fazer isso, digite python2.5 e, em seguida, o caminho do arquivo para o arquivo.py.

Recomendado: