Hvordan spore lenker på et web ved hjelp av Python

Innholdsfortegnelse

I dag skal jeg lære deg bla gjennom lenker på en side med Python (skraping på nettet), kan dette være veldig nyttig for å spore innhold på et nettsted automatisk og ikke måtte gjøre det for hånd. I programmet jeg tar med, blir hver lenke hentet ved å lese html. Du kan endre programmet for å søke etter et bestemt innhold og bare vise koblingene du er interessert i.

Du kan også gjøre webskraping ved hjelp av robots.txt -filen eller nettstedskartene som nettstedene har.

MerkKoden som vises fungerer i Python 3.x, hvis du vil kjøre den i versjon 2.x må du gjøre små modifikasjoner.

Her er koden:

 importkø import urllib.request import re fra urllib.parse import urljoin def download (side): prøv: request = urllib.request.Request (side) html = urllib.request.urlopen (forespørsel) .read () print ("[ *] Last ned OK >> ", side) unntatt: print ('[!] Feil ved nedlasting', side) return None return html def crawlLinks (page): searchLinks = re.compile ('] + href = ["'] ( . *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (side) besøkt = [side] print (" Søker etter lenker i ", side) mens (queue.qsize () > 0): html = nedlasting (queue.get ()) hvis html == Ingen: fortsett lenker = searchLinks.findall (str (html)) for lenke i lenker: link = urljoin (side, str (link)) if ( lenke ikke i besøkt): queue.put (lenke) visit.append (lenke) hvis __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
Det første vi gjør er iimportere de nødvendige bibliotekene, for vanlige uttrykk (re), for å bruke køen (køen), for å stille forespørsler og lese en side (urllib.request) og for å lage absolutte URL -er fra en basis -URL og en annen URL (urljoin).

Koden delt inn i 2 funksjoner
å laste nedDet hjelper oss å laste ned html til en side. Den trenger ikke mye forklaring, det eneste den gjør er en forespørsel til ønsket side, den leser html, hvis alt går bra viser det en Last ned OK -melding, og hvis den ikke viser at det var en feil (Her ser vi kan vise informasjon om feilen), returnerer html read eller None på slutten.
spor LenkerDet er hovedfunksjonen og vil gå gjennom hver lenke. La oss forklare det litt:

  • Vi lager en variabel med et regulært uttrykk, som hjelper oss å finne koblingene i html.
  • Vi starter en variabel av typen hale med den første siden, det vil hjelpe oss å lagre koblingene i "rekkefølgen" som vi oppdaget dem. Vi starter også en listetypevariabel kalt besøkt som vi vil bruke til å lagre koblingene mens de blir besøkt, dette gjøres for å unngå en uendelig sløyfe, tenk deg at side x refererer til side y, og dette i sin tur til side x, alle mens vi vil sette inn disse koblingene uendelig.
  • Kjernen i funksjonen er while -løkken, som vil bli utført så lenge køen har koblinger, så vi sjekker at størrelsen er større enn 0. I hvert pass fjerner vi en lenke fra køen og sender den til nedlastingsfunksjonen , som vil returnere html til oss, så ser vi etter koblingene, og vi sjekker om vi allerede har besøkt den, hvis ikke, legger vi den til i køen og til listen.

MerkDet kan virke som om listen er overflødig, men vi kommer til å fjerne og slette koblingene fra køen, så sjekken ville ikke være korrekt, kanskje lenken vi besøkte for en stund siden, og den ikke lenger er i køen, men det er vil være på listen.

Den siste delen av koden utenfor funksjonene vil ta seg av å utføre koden. I det følgende bildet kan du se et skjermbilde av løpekoden, som sporer solvetic.

Hvis du vil, kan du hjelpe deg selv med et bibliotek som finnes for python kalt BeautifulSoup, det vil virke veldig enkelt å håndtere, jeg anbefaler det.

Hvis du vil ha koden, her er en zip:

TraverseLinks.zip 646 byte 493 Nedlastinger

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng

Du vil bidra til utvikling av området, dele siden med vennene dine

wave wave wave wave wave