Come tenere traccia dei collegamenti su un Web utilizzando Python

Sommario

Oggi ti insegnerò scorrere i collegamenti in una pagina con Python (raschiatura del web), questo può essere molto utile per tracciare automaticamente il contenuto di un sito web e non doverlo fare manualmente. Nel programma che porto, ogni link si ottiene leggendo l'html, potresti modificare il programma per cercare un determinato contenuto e mostrare solo i link a cui sei interessato.

Puoi anche eseguire il web scraping utilizzando il file robots.txt o le sitemap dei siti web.

NotaIl codice mostrato funziona in Python 3.x, se vuoi eseguirlo nella versione 2.x dovrai fare piccole modifiche.

Ecco il codice:

 import queue import urllib.request import re da urllib.parse import urljoin def download (page): try: request = urllib.request.Request (page) html = urllib.request.urlopen (request) .read() print ("[ *] Download OK >> ", page) tranne: print ('[!] Error downloading', page) return Nessuno return html def crawlLinks (page): searchLinks = re.compile ('] + href = ["'] ( . *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (page) visit = [page] print (" Ricerca di link in ", page) while (queue.qsize () > 0): html = download (queue.get ()) if html == Nessuno: continua links = searchLinks.findall (str (html)) per link nei link: link = urljoin (page, str (link)) if ( link non in visitato): queue.put (link) visit.append (link) if __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
La prima cosa che facciamo è iimportare le librerie necessarie, per le espressioni regolari (re), per utilizzare la coda (queue), per fare richieste e leggere una pagina (urllib.request) e per la costruzione di URL assoluti da un URL di base e un altro URL (urljoin).

Codice diviso in 2 funzioni
scaricareCi aiuta a scaricare l'html di una pagina. Non ha bisogno di molte spiegazioni, l'unica cosa che fa è una richiesta alla pagina desiderata, ne legge l'html, se tutto va bene mostra un messaggio Download OK, e se non mostra che c'è stato un errore (qui potrebbe mostrare informazioni sull'errore), alla fine restituisce l'html letto o Nessuno.
collegamenti tracciaÈ la funzione principale e scorrerà attraverso ogni collegamento. Spieghiamolo un po':

  • Creiamo una variabile con un'espressione regolare, che ci aiuta a trovare i collegamenti nell'html.
  • Iniziamo una variabile di tipo coda con la pagina iniziale, ci aiuterà a salvare i collegamenti nell'"ordine" in cui li abbiamo scoperti. Iniziamo anche una variabile di tipo elenco chiamata visit che useremo per salvare i link man mano che vengono visitati, questo per evitare un loop infinito, immaginiamo che la pagina x si riferisca alla pagina y, e questa a sua volta alla pagina x , tutte le mentre inseriremo questi link all'infinito.
  • Il cuore della funzione è il ciclo while, che verrà eseguito finché la coda ha dei collegamenti, quindi controlliamo che la dimensione sia maggiore di 0. In ogni passaggio rimuoviamo un collegamento dalla coda e lo inviamo alla funzione di download , che ci restituirà l'html, quindi cerchiamo i link e controlliamo se lo abbiamo già visitato, in caso contrario lo aggiungiamo alla coda e alla lista.

NotaPuò sembrare che l'elenco sia superfluo, ma stiamo per rimuovere ed eliminare i collegamenti dalla coda, quindi il controllo non sarebbe corretto, forse il collegamento che abbiamo visitato tempo fa e non è più in coda, ma è sarà nella lista.

L'ultima parte del codice al di fuori delle funzioni si occuperà dell'esecuzione del codice. Nell'immagine seguente puoi vedere uno screenshot del codice in esecuzione, tracciando il solvetic.

Se vuoi puoi aiutarti con una libreria che esiste per python chiamata BeautifulSoup, ti sembrerà molto facile da gestire, te lo consiglio.

Nel caso in cui desideri il codice, ecco un zip:

TraverseLinks.zip 646 byte 493 download

Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave