Jak śledzić linki w sieci za pomocą Pythona

Spisie treści

Dziś mam zamiar Cię uczyć pętla przez linki na stronie za pomocą Pythona (skrobanie sieci), może to być bardzo przydatne przy automatycznym śledzeniu treści w witrynie bez konieczności robienia tego ręcznie. W programie, który przynoszę, każdy link uzyskuje się czytając html, można zmodyfikować program tak, aby wyszukiwał określoną treść i wyświetlał tylko te linki, którymi jesteś zainteresowany.

Możesz także zrobić web scraping za pomocą pliku robots.txt lub map witryn, które mają witryny.

NotatkaPokazany kod działa w Pythonie 3.x, jeśli chcesz go uruchomić w wersji 2.x, będziesz musiał dokonać drobnych modyfikacji.

Oto kod:

 import kolejki import urllib.request import re z urllib.parse import urljoin def download (strona): try: request = urllib.request.Request (strona) html = urllib.request.urlopen (request) .read() print ("[ *] Pobierz OK >> ", strona) z wyjątkiem: print ('[!] Błąd pobierania', strona) return Brak return html def crawlLinks (strona): searchLinks = re.compile ('] + href = ["'] ( *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (strona) odwiedzona = [strona] print (" Szukanie linków w ", strona) while (queue.qsize () > 0): html = download (queue.get ()) if html == Brak: kontynuuj linki = searchLinks.findall (str (html)) dla linku w linkach: link = urljoin (strona, str (link)) if ( link nie w odwiedzonych): queue.put (link) visit.append (link) if __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
Pierwszą rzeczą, którą robimy, jest jazaimportuj potrzebne biblioteki, do wyrażeń regularnych (re), do korzystania z kolejki (kolejki), do wysyłania żądań i odczytywania strony (urllib.request) oraz do konstruowania bezwzględnych adresów URL z podstawowego adresu URL i innego adresu URL (urljoin).

Kod podzielony na 2 funkcje
pobraćPomaga nam pobrać html strony. Nie wymaga wielu wyjaśnień, jedyne, co robi, to żądanie do żądanej strony, odczytuje swój html, jeśli wszystko pójdzie dobrze, wyświetla komunikat Pobierz OK, a jeśli nie pokazuje, że wystąpił błąd (tutaj może pokazać informację o błędzie), na koniec zwraca html read lub None.
śledzić linkiJest to główna funkcja i będzie działać przez każde łącze. Wyjaśnijmy to trochę:

  • Tworzymy zmienną z wyrażeniem regularnym, która pomaga nam znaleźć linki w html.
  • Zmienną typu tail zaczynamy od strony początkowej, pomoże nam to zapisać linki w takiej „kolejności”, w jakiej je odkryliśmy. Uruchamiamy również zmienną typu listy o nazwie odwiedzone, której użyjemy do zapisywania linków w miarę ich odwiedzania. Ma to na celu uniknięcie nieskończonej pętli, wyobraź sobie, że strona x odnosi się do strony y, a ta z kolei do strony x , wszystkie podczas gdy będziemy wstawiać te linki bez końca.
  • Rdzeniem funkcji jest pętla while, która będzie wykonywana tak długo, jak w kolejce będą linki, więc sprawdzamy, czy rozmiar jest większy niż 0. W każdym przebiegu usuwamy link z kolejki i wysyłamy go do funkcji download , który zwróci nam html, następnie szukamy linków i sprawdzamy, czy już go odwiedziliśmy, jeśli nie, dodajemy go do kolejki i do listy.

NotatkaMoże się wydawać, że lista jest zbędna, ale zamierzamy usunąć i skasować linki z kolejki, więc sprawdzenie nie byłoby poprawne, może link, który odwiedziliśmy jakiś czas temu i nie ma go już w kolejce, ale to będzie na liście.

Ostatnia część kodu poza funkcjami zajmie się wykonaniem kodu. Na poniższym obrazku możesz zobaczyć zrzut ekranu działającego kodu, śledzącego solvetic.

Jeśli chcesz, możesz pomóc sobie biblioteką, która istnieje dla Pythona o nazwie BeautifulSoup, będzie wydawać się bardzo łatwa w obsłudze, polecam.

Jeśli chcesz kod, oto zip:

TraverseLinks.zip 646 bajtów 493 Pobrania

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave