Web crawling to przechodzenie bota po stronach internetowych. Jest to proces poszukiwania linków i wchodzenia na kolejne strony według ustalonej strategii. Jest to podstawa web scrapingu i jeden z ważniejszych elementów pod kątem optymalizacji scraperów.
O tym czym się różni web scraping od web crawlingu możesz przeczytać w moim artykule „Web Scraping w Pythonie”. Dzisiaj zajmiemy się strategiami możliwymi do realizacji w samym crawlingu.
Możemy wyróżnić 3 główne rodzaje crawlowania:
- Strategiczne
- Ad-hoc
- Po sitemapie (lub innej liście adresów URL)
Web crawling strategiczny
Strategiczny web crawling to przechodzenie po stronie internetowej w najbardziej ustrukturyzowany sposób.
W pierwszej kolejności boty powinniśmy pobrać wszystkie linki, na które boty będą wchodzić lub zdefiniować strategię przechodzenia strony internetowej.
Aby to osiągnąć najlepiej w pierwszej kolejności samemu odkrywać stronę. Podczas badania strony szukamy miejsc, w których znajdują się interesujące nas linki. Mogą być to paginacje, strony kategorii, wyniki wyszukań czy listy.
Tworzymy proces, dzięki któremu bot przechodząc po stronie nie ominie nic ważnego. Przeanalizujemy przykładowy schemat przechodzenia po stronie w przypadku sklepu internetowego:
- Wejście na stronę główną
- Wejście na stronę każdej interesującej nas kategorii
- W każdej kategorii przejście aż do ostatniej strony paginacji
- Wejście na każdy wylistowany produkt
Crawlując w ten sposób należy pamiętać o potencjalnej asynchroniczności wykonywania żądań HTTP podczas scrapowania. Musimy pamiętać, że bot będzie wchodził na poszczególne strony w trudnej do przewidzenia kolejności. Proces web crawlingu powinien być więc najbardziej samowystarczalny jak tylko to możliwe.
Jest to najbardziej uniwersalne podejście do crawlowania. Szczególnie dobrze sprawdza się przy ogromnych projektach. Stosowanie takiego podejścia ma jeszcze jeden ważny plus – łatwo wznowić scrapowanie w przypadku awarii.
Web crawling ad-hoc
Crawlowanie ad-hoc to strategia w której boty wchodzą na stronę, pobierają wszystkie dane, a następnie pobierają wszystkie interesujące nas linki i wchodzą na nie od razu.
Takie podejście jest nieco szybsze w implementacji i działaniu niż podejście strategiczne, jednak nie pozwala nam na dostosowanie scrapowania do wymagań i utrudnia symulowanie ruchu użytkownika.
Podczas stosowania crawlowania ad-hoc musimy pamiętać o odpowiednim filtrowaniu linków. Nie powinniśmy odwiedzać tych samych stron kilkukrotnie, warto również zdefiniować sposób pobierania linków, tak aby nie wchodzić na podstrony, które nie mają dla nas wartości.
Częstą taktyką jest zdefiniowanie black listy, w której umieścimy na przykład wszystkie linki w ścieżce /checkout/
Web crawling po sitemapie
Jest to najprostsze podejście, gdyż jedyne co musimy robić to wrzucić gotową listę linków do naszego systemu scrapingowego.
Wiele stron udostępnia mapę witryny (sitemap.xml), z której możemy skorzystać. Tego typu mapa najczęściej znajduje się pod adresem w postaci https://domena.com/sitemap.xml. np. https://www.bbc.com/sitemap.xml
Jeżeli nie jesteś w stanie znaleźć sitemapy na stronie warto posłużyć się wyszukiwarką Google.
Należy jednak pamiętać, że nie zawsze taka mapa będzie zawierała strony, na których nam zależy. Aktualizowanie sitemapy również niekiedy pozostawia wiele do życzenia i możemy natknąć się na niedziałające linki.
Crawlując po sitemapie również zadbajmy o odfiltrowanie niektórych linków.
Jaką strategię crawlowania wybrać?
Jak zwykle – to zależy.
W przypadku dużych projektów najczęściej wybieram crawlowanie strategiczne. Jest to najbardziej uniwersalne podejście i ułatwia utrzymanie scrapera w długiej perspektywie czasowej.
Jeżeli dane na stronie nie mają dobrze zdefiniowanej struktury, lub struktura zmienia się na różnych podstronach i trudno coś zaplanować – wtedy wybieram metodę ad-hoc.
Jeżeli jednak strona ma dobrze stworzoną sitemapę i są tam linki, które mnie interesują, dlaczego miałbym z tego nie skorzystać?