Hur man spårar länkar på en webb med Python

Innehållsförteckning

Idag ska jag lära dig gå igenom länkar på en sida med Python (webbskrapning), kan detta vara mycket användbart för att spåra innehåll på en webbplats automatiskt och inte behöva göra det för hand. I det program som jag tar med erhålls varje länk genom att läsa html, du kan ändra programmet för att söka efter ett visst innehåll och endast visa de länkar som du är intresserad av.

Du kan också göra webbskrapning med hjälp av filen robots.txt eller de webbplatskartor som webbplatserna har.

NoteraKoden som visas fungerar i Python 3.x, om du vill köra den i version 2.x måste du göra små ändringar.

Här är koden:

 importkö import urllib.request import re från urllib.parse import urljoin def download (sida): försök: request = urllib.request.Request (sida) html = urllib.request.urlopen (begäran) .läs () print ("[ *] Ladda ner OK >> ", sida) utom: print ('[!] Fel vid nedladdning', sida) return None return html def crawlLinks (page): searchLinks = re.compile ('] + href = ["'] ( . *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (sida) besökt = [sida] skriv ut (" Söker efter länkar i ", sida) medan (queue.qsize () > 0): html = nedladdning (queue.get ()) om html == Ingen: fortsätt länkar = searchLinks.findall (str (html)) för länk i länkar: länk = urljoin (sida, str (länk)) om ( länk inte i besökt): queue.put (länk) besökt.append (länk) om __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
Det första vi gör är iimportera nödvändiga bibliotek, för reguljära uttryck (re), för att använda kön (kö), för att göra förfrågningar och läsa en sida (urllib.request) och för konstruktion av absoluta URL: er från en bas -URL och en annan URL (urljoin).

Koden indelad i 2 funktioner
att ladda nedDet hjälper oss att ladda ner html för en sida. Det behöver inte mycket förklaring, det enda det gör är en begäran till önskad sida, den läser dess html, om allt går bra visar det ett Ladda ner OK -meddelande, och om det inte visar att det var ett fel (Här vi kan visa information om felet), i slutet returnerar HTML -läsningen eller Ingen.
spåra länkarDet är huvudfunktionen och kommer att köras genom varje länk. Låt oss förklara det lite:

  • Vi skapar en variabel med ett reguljärt uttryck, som hjälper oss att hitta länkarna i html.
  • Vi startar en variabel av typen svans med startsidan, det hjälper oss att spara länkarna i "ordningen" som vi upptäckte dem. Vi startar också en listtypvariabel som kallas besökt som vi kommer att använda för att spara länkarna när de besöks, detta görs för att undvika en oändlig loop, föreställ dig att sidan x hänvisar till sidan y, och detta i sin tur till sida x, alla medan vi kommer att infoga dessa länkar oändligt.
  • Kärnan i funktionen är medan loop, som kommer att köras så länge kön har länkar, så vi kontrollerar att storleken är större än 0. I varje pass tar vi bort en länk från kön och skickar den till nedladdningsfunktionen , som kommer att returnera html till oss, sedan letar vi efter länkarna och vi kontrollerar om vi redan har besökt den, om inte, lägger vi till den i kön och i listan.

NoteraDet kan tyckas att listan är överflödig, men vi kommer att ta bort och ta bort länkar från kön, så kontrollen skulle inte vara korrekt, kanske länken vi besökte för ett tag sedan och den är inte längre i kön, men det är kommer att finnas i listan.

Den sista delen av koden utanför funktionerna tar hand om att köra koden. I följande bild kan du se en skärmdump av körkoden, som spårar solvetic.

Om du vill kan du hjälpa dig själv med ett bibliotek som finns för python som heter BeautifulSoup, det kommer att verka väldigt enkelt att hantera, jag rekommenderar det.

Om du vill ha koden, här är en zip:

TraverseLinks.zip 646 byte 493 Nedladdningar

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave