Søkemotorer ofte bruker algoritmer som tar informasjon fra websider og rangere dem etter popularitet. Disse algoritmene er ofte kalt "edderkopper . " En Python programmerer kan lære mye om flertrådet programmering, regulære uttrykk mønstergjenkjenning og web data henting ved å opprette en edderkopp . Du kan starte en Python edderkopp script med litt mer enn de inkluderte Python biblioteker og tolk . Du trenger
Python tolk
Vis flere instruksjoner
en
Definer to regulære uttrykk for å matche e-postadresser og hyperlenker i koden til websiden :
import urllibimport threadingimport re
r = re.compile (' ( ? < = href \\ = \\ " mailto :). *? @ . *? . [\\ w] { 0,3 } ( ? = \\ " ) ') # Mailsr1 = re.compile (' ( ? < = href \\ = \\ " ) . *? ( ? = \\ " ) ') # Lenker
2
Definer en klasse konstruktør som tar en webside URL som argument sin . Konstruktøren tar nettadressen som utgangspunkt, og deretter starte " Spider "-klassen som en egen tråd : en
klasse Spider ( threading.Thread ) : def __ init__ (egen , adresse) : self.url = addressthreading.Thread.__init__ (egen )
3
Definere "run "-metoden , som utfører hver gang en ny tråd av typen " Spider " begynner . Denne metoden behandler websiden med " urllib.urlopen " , trekker e-poster fra koden ved å bruke " r" vanlig uttrykk og lagrer dem i en loggfil . Det tar så hyperlenker og laster ned informasjon fra denne URLen, starter en ny tråd for å behandle denne websiden : en
def run (egen ) : en
source = urllib.urlopen ( self.url . ) lese () post = r.findall ( kilde) post = liste ( sett ( post) ) log = open (' log.txt ' , 'a' ) for i in post : hvis re.match ( "^ [ ,"! _.0 - 9a -z -] + @ ( . [ 0 - 9a -z ] [ 0 - 9a -z -] + ) + [ az ] { 2,4 } $ " , i) = Ingen: hvis ( i + '\\ n' ) ikke er i (åpne ( ' log.txt ', ' r' ) readlines (). ) : print 'Saved :', ilog.write ( i + '\\ n' ) teller + = 1log.close ( ) urls = r1.findall ( kilde ) for url i webadresser : . Crawl ( url) start ( )
4
Kjør Spider klassen ved å kalle en ny tråd av typen " Spider" og leverer den med en URL:
Spider (' www.google.com ') start ( )
.