Sådan spores links på et web ved hjælp af Python

Indholdsfortegnelse

I dag vil jeg lære dig sløjfe gennem links på en side med Python (webskrabning), kan dette være meget nyttigt at spore indhold på et websted automatisk og ikke behøver at gøre det i hånden. I det program, jeg bringer, opnås hvert link ved at læse html, du kan ændre programmet for at søge efter et bestemt indhold og kun vise de links, som du er interesseret i.

Du kan også lave webskrabning ved hjælp af filen robots.txt eller de sitemaps, som webstederne har.

BemærkDen viste kode fungerer i Python 3.x, hvis du vil køre den i version 2.x, bliver du nødt til at foretage små ændringer.

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 (anmodning) .read () print ("[ *] Download OK >> ", side) undtagen: print ('[!] Fejl ved download', side) returner Ingen returner html def crawlLinks (side): searchLinks = re.compile ('] + href = [' '] ( . *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (side) besøgte = [side] print (" Søger efter links i ", side) mens (queue.qsize () > 0): html = download (queue.get ()) hvis html == Ingen: fortsæt links = searchLinks.findall (str (html)) for link i links: link = urljoin (side, str (link)) hvis ( link ikke i besøgt): queue.put (link) besøgte.append (link) hvis __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
Det første vi gør er iimportere de nødvendige biblioteker, for regulære udtryk (gen), for at bruge køen (køen), for at stille anmodninger og læse en side (urllib.request) og til konstruktion af absolutte URL'er fra en basis -URL og en anden URL (urljoin).

Kode opdelt i 2 funktioner
at downloadeDet hjælper os med at downloade html af en side. Det behøver ikke meget forklaring, det eneste, det gør, er en anmodning til den ønskede side, den læser dens html, hvis alt går godt, viser det en Download OK -besked, og hvis det ikke viser, at der var en fejl (Her ser vi kunne vise oplysninger om fejlen), returnerer i slutningen html read eller None.
spor linksDet er hovedfunktionen og vil køre gennem hvert link. Lad os forklare det lidt:

  • Vi opretter en variabel med et regulært udtryk, som hjælper os med at finde linkene i html.
  • Vi starter en variabel af typen hale med den indledende side, det vil hjælpe os med at gemme linkene i den "rækkefølge", som vi opdagede dem. Vi starter også en listetypevariabel kaldet besøgt, som vi vil bruge til at gemme linkene, når de besøges, dette gøres for at undgå en uendelig loop, forestil dig, at side x refererer til side y, og dette til gengæld til side x, alle de mens vi vil indsætte disse links uendeligt.
  • Funktionens kerne er while -sløjfen, der udføres, så længe køen har links, så vi kontrollerer, at størrelsen er større end 0. I hvert pass fjerner vi et link fra køen og sender det til download -funktionen , der vil returnere html'en til os, så leder vi efter linkene, og vi kontrollerer, om vi allerede har besøgt den, hvis ikke, tilføjer vi den til køen og til listen.

BemærkDet kan se ud til, at listen er overflødig, men vi kommer til at fjerne og slette links fra køen, så kontrollen ikke ville være korrekt, måske det link, vi besøgte for et stykke tid siden, og det ikke længere er i køen, men det er vil være på listen.

Den sidste del af koden uden for funktionerne sørger for at udføre koden. I det følgende billede kan du se et skærmbillede af den kørende kode, der sporer solvetic.

Hvis du vil, kan du hjælpe dig selv med et bibliotek, der findes til python kaldet BeautifulSoup, det vil virke meget let at håndtere, jeg anbefaler det.

Hvis du vil have koden, her er en zip:

TraverseLinks.zip 646 bytes 493 Downloads

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave