Sommario:

Spidering di un sito Web Ajax con un modulo di accesso asincrono: 6 passaggi (con immagini)
Spidering di un sito Web Ajax con un modulo di accesso asincrono: 6 passaggi (con immagini)

Video: Spidering di un sito Web Ajax con un modulo di accesso asincrono: 6 passaggi (con immagini)

Video: Spidering di un sito Web Ajax con un modulo di accesso asincrono: 6 passaggi (con immagini)
Video: Creo un SITO WEB (da Zero) #06 ⋆ REST, RESTful WS, JSON e AJAX 2024, Novembre
Anonim
Spidering di un sito Web Ajax con un modulo di accesso asincrono
Spidering di un sito Web Ajax con un modulo di accesso asincrono

Il problema: gli strumenti di spidering non consentono l'autenticazione dell'accesso AJAX.

Questa istruzione ti mostrerà come accedere tramite un modulo AJAX usando Python e un modulo chiamato Mechanize. Gli spider sono programmi di automazione web che stanno diventando un modo sempre più popolare per le persone di raccogliere dati online. Si insinuano nel web raccogliendo materiali preziosi per alimentare le web company più potenti in circolazione. Altri strisciano e raccolgono insiemi specifici di dati per migliorare il processo decisionale, o dedurre ciò che è attualmente "in" o trovare i percorsi di viaggio più economici. Gli spider (web crawler, webbot o screen scraper) sono ottimi per trasformare il goop HTML in una parvenza di dati intelligenti, ma abbiamo un problema quando si tratta di pagine web abilitate per AJAX che hanno JavaScript e sessioni abilitate per i cookie che non sono navigabili con il normale set di strumenti per lo spidering. In questa istruzione accederemo alla nostra pagina dei membri su pubmatic.com. Questi passaggi ti mostreranno un metodo da seguire, ma la tua pagina sarà diversa. Divertiti!

Passaggio 1: raccogliere materiali

Raccogli materiali
Raccogli materiali

Dovrai iniziare a integrare le tue risorse di programmazione. Avrai bisogno dei seguenti programmi. Usa le loro guide per aiutarti a installare questi… Installa Firebug È un addon per Firefox Installa Python Vai a: python.org Vai a: python.org Installa il modulo Mechanize Ottieni Mechanize Ottieni Mechanize Altri utili strumenti di Spidering: BeautifulSoup

Passaggio 2: trova le intestazioni necessarie per creare una sessione

Un ragno ben costruito accederà a una pagina web come se fosse un browser controllato da un essere umano che tiene nascosti gli indizi sulla sua vera origine. Parte dell'interazione tra browser e server avviene tramite richieste GET e POST che puoi trovare nelle intestazioni (questa informazione viene visualizzata raramente su un browser, ma è molto importante). Puoi visualizzare alcune di queste informazioni premendo Ctrl I (in Firefox) per aprire la finestra Informazioni sulla pagina. Per travestirti da browser mite devi identificarti utilizzando le stesse credenziali. Se provassi ad accedere a pubmatic con javascript disabilitato nel tuo browser non andresti molto lontano poiché i reindirizzamenti vengono effettuati tramite javascript. Quindi considerando che la maggior parte dei browser spider non ha interpreti javascript dovremo fare il login attraverso una rotta alternativa. Iniziamo ottenendo le informazioni di intestazione inviate dal browser quando fai clic su Invia. Se si trattasse di un normale accesso al browser, utilizzeresti Mechanize per compilare il modulo e fare clic su Invia. I normali moduli di accesso sono incapsulati all'interno di un tag … e Mechanize sarebbe in grado di inviarlo e interrogare la pagina successiva senza problemi. Poiché non abbiamo un tag modulo completato, la funzione di invio viene gestita da javascript. Controlliamo la funzione submitForm di pubmatic. Per fare ciò, prima apri la pagina web in Firefox e accendi firebug facendo clic sulla lucciola nell'angolo in basso a destra. Quindi fai clic sulla scheda dello script, copia tutto il codice che appare e incollalo nel tuo software di modifica del testo preferito. È quindi possibile eliminare tutto il codice tranne la funzione submitForm. Inizia con la funzione "submitForm(theform) {" e tutto ciò che sta tra questo e le funzioni che chiudono la parentesi graffa "}". Nell'analizzare questa funzione in modo molto primitivo notiamo che si verifica una certa autenticazione riportando una variabile chiamata xmldoc che viene analizzata come xml. Questa è una caratteristica chiave di AJAX che ha interrogato il server e riportato alcuni documenti XML che contengono un albero di informazioni. Il nodo session_id contiene il session_id se l'autenticazione ha avuto successo, puoi dirlo guardando questo bit di codice: "if (session_id != null) { //login riuscito". Ora vogliamo impedire a questo bit di javascript di portarci da qualche parte in modo da poter vedere cosa viene pubblicato sul server durante l'autenticazione. Per fare ciò, commentiamo qualsiasi reindirizzamento di finestra che assomiglia a questo: "window.location=…". Per commentare questo aggiungi doppi slash prima di loro in questo modo: "//window.location…" questo impedisce l'esecuzione del codice. Puoi scaricare il file Javascript di seguito che ha già apportato queste modifiche. Copia e incolla questo bit modificato di javascript nella finestra della console sul lato destro e fai clic su Esegui. Questo sovrascrive la funzione javascript già presente nella pagina con la nostra nuova versione. Ora quando compili le tue credenziali e fai clic su Invia dovresti vedere le informazioni di intestazione POST e GET riempire la console, ma non andrai da nessuna parte. Le informazioni POST sono le informazioni inviate al server dalle funzioni AJAX, vuoi essere tanto in questo modo il più possibile, copia e incolla tali informazioni in un blocco note.

Passaggio 3: preparare il codice

Prima di aggiungere le nuove intestazioni che abbiamo trovato, creiamo un codice python di accesso a Mechanize basato su modelli. Lo stiamo facendo per due motivi, in primo luogo per avere un componente che funziona per aggiungere nuove cose e in secondo luogo in modo da vedere come si accede normalmente a una pagina Web non AJAX-y. Aprire il blocco note o equivalente e copiare e incollare il a seguire. Quando hai finito salvalo come youfilename.py da qualche parte che puoi trovare.#!/usr/bin/python# -*- coding: utf-8 -*-#Inizia con il tuo modulo imports:from mechanize import Browser #Crea il tuo istanza del browser tramite la chiamata di funzione Browser();br = Browser()#Imposta il browser in modo che ignori le richieste spiders.txt#Fai questo con attenzione, se alla pagina web non piacciono gli spider, potrebbero essere sconvolti nel trovarti lìbr.set_handle_robots(False) #Apri la pagina a cui vuoi accedere tobr.open("https://pubmatic.com/04_betasignin.jsp")#Poiché conosco il nome del modulo, posso semplicemente selezionare il modulo con il nomebr.select_form ("login")#Usando i nomi degli elementi del modulo inserisco i nomi del modulo elementsbr['email'] = "[email protected]"br['password'] = "Asquid22"#br.submit () invia il modulo e estrae la pagina risultante, si crea una nuova istanza del browser#response sotto contiene la pageresponse risultante = br.submit()#Questo stamperà il corpo della pagina web ricevuta#print response.read()

Passaggio 4: invia i segnali giusti

Invia i segnali giusti
Invia i segnali giusti

Mechanize ha una semplice funzione per aggiungere intestazioni alle intestazioni POST, questo ci permetterà di apparire allo stesso browser che hai usato per accedere alla pagina la prima volta. Apri il file con le intestazioni che hai trovato usando Firebug e modifica questo file di testo in modo che corrisponda. Sostituisci tutto tra virgolette con l'elemento corretto dall'elenco delle intestazioni: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"ACCETTA = "text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, */*;q= 0.5"ACCEPT_LANGUAGE = "en-us, it;q=0.5"ACCEPT_ENCODING = "gzip, deflate"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.1212791201.20; KADUSERCOOKIE=EA2C3249-E822-456E-847A-1FF0D4085A85; utmz=103266945.1210113004.1.1.utmccn=(diretto)|utmcsr=(diretto)|utmcmd=(nessuno); JSESSIONID=60F194BE2A5D31C3C3193Cwo1. no-cache"CACHE_CONTROL ="no-cache"Questo crea un insieme di variabili che puoi usare per aggiungere all'intestazione us ing questo codice:br.add_header = [("Host", HOST)]br.add_headers = [("User-agent", USER_AGENT)]br.add_headers = [("Accetta", ACCEPT)]br.add_header = [("Accetta-Lingua", ACCEPT_LANGUAGE)]br.add_headers = [("Accetta-Codifica", ACCEPT_ENCODING)]br.add_headers = [("Accetta-Set di caratteri", ACCEPT_CHARSET)]br.add_header = [("Mantieni vivo ", KEEP_ALIVE)]br.add_headers = [("Connection", CONNECTION)]br.add_header = [("Content-Type", CONTENT_TYPE)]br.add_header = [("Referer", REFERER)]br.add_header = [("Content-Length", CONTENT_LENGTH)]br.add_headers = [("Cookie", COOKIE)]br.add_headers = [("Pragma", PRAGMA)]br.add_headers = [("Cache-Control", CACHE_CONTROL)]Ora, quando chiamiamo la funzione di apertura della pagina, anche le intestazioni verranno inviate al server. br.open("https://pubmatic.com/04_betasignin.jsp")

Passaggio 5: cookie meccanizzati

Cookie meccanizzati
Cookie meccanizzati

Questo passaggio è dovuto al fatto che meccanizzare automatizza la gestione dei cookie, ma è importante sapere cosa sta succedendo:

Quando il modulo viene inviato hai le intestazioni giuste come se avessi inviato utilizzando la funzione javascript. Il server quindi autentica queste informazioni e genera un ID di sessione e lo salva in un cookie se il nome utente e la password sono corretti. La buona notizia è che Mechanize mangia e rigurgita automaticamente i cookie, quindi non devi preoccuparti di inviare e ricevere il cookie. Quindi, una volta creato un ID di sessione che funziona, puoi accedere alla sezione riservata ai membri del sito web.

Passaggio 6: chiave del cuore

Ora che abbiamo acquisito un ID di sessione e Mechanize lo ha salvato nei suoi cookie, possiamo seguire il javascript per vedere dove dobbiamo andare. Guardando all'interno di "if (session_id != null) { // accesso riuscito" per vedere dove andare in caso di successo. Guardando il codice di riposizionamento della finestra: "if (adurlbase.search(/pubmatic.com/) != -1) { window.location="https://pubmatic.com/05_homeloggedin.jsp" + "?v=" + Math.random()*10000;" vediamo che dobbiamo andare su un sito web che si trova all'indirizzo https://pubmatic.com/05_homeloggedin.jsp?v=qualche numero casuale. Quindi creiamo un numero casuale falso da inserire e creiamo una nuova istanza del browser per leggere la pagina appena aperta:response2 = br.open("https://pubmatic.com/05_homeloggedin.jsp?v=2703")E questo dovrebbe essere. Il tuo codice è ora completo, utilizzando le intestazioni appropriate e il gestore di cookie meccanizzato ora possiamo accedere alle parti interne di pubmatic. Apri il terminale, carica il pacchetto python qui sotto e fai il login. Per fare ciò, digita python2.5 e quindi il percorso del file.py.

Consigliato: