Największą zmorą dla web scrapera są bany w web scrapingu. Czym są bany i dlaczego w ogóle strony banują ruch pochodzący od botów?
Ban (z ang. „zakaz”) jest to blokada nakładana na użytkownika, która ogranicza jego możliwości korzystania z konkretnej usługi.
W przypadku banów w kontekście web scrapingu użytkownikowi zostaje zablokowana możliwość odwiedzania strony internetowej i dostępu do jej treści.
Po czym poznać bany w web scrapingu?
Jest kilka różnych skutków banów na stronach internetowych. W niektórych przypadkach strona, która nas zbanowała, zwraca odpowiedź, wskazującą, że podany adres WWW nie istnieje (np. kod 404). Aby upewnić się, że jest to ban, a nie błąd po stronie serwera, wystarczy wejść na stronę z innego urządzenia (a najlepiej również z innej sieci).
W innym przypadkach strony mogą zwracać nieco dokładniejsze odpowiedzi jak np. stronę z kodem odpowiedzi 403 (Forbidden).
Niektóre strony nie blokują całkowitego dostępu do treści strony, lecz jedynie do konkretnej usługi, np. wyszukiwarki. W takiej sytuacji na stronę wejdziemy normalnie, jednak przy próbie wyszukania zostaniemy poinformowani, że dokonaliśmy nadużycia.
Dlaczego strony stosują bany w web scrapingu?
Jest kilka powodów stosowania banów przez strony internetowe, które różną się w zależności od firmy czy danych prezentowanych na stronie.
Ochrona danych znajdujących się na stronie
Pierwszym powodem jest chęć ochrony wartości intelektualnej (tj. danych) znajdujących się na stronie internetowej. Wielu właścicieli stron dba o to, aby treści dostępne na stronie były unikalne. Aby utrzymać unikalność, decydują się oni na wdrożenie różnych mechanizmów blokujących ruch niepochodzący od ludzi.
Ochrona przed nieuczciwymi botami
Nie wszystkie boty w internecie to web scrapery, których celem jest pobieranie ogólnodostępnych danych w celu budowania modeli czy tworzenia nowej wartości biznesowej.
Część botów przechodzi po stronach internetowych z zamiarem dokonania oszustwa. Często tego typu boty próbują pobierać adresy email czy numery by je sprzedawać, czy nawet stosując proste metody próbują włamać się do stron i pobrać m.in. hasła użytkowników.
Oczywiście każdy chce uniknąć tego typu ruchu, na co jednym ze sposobów są właśnie bany.
Minimalizacja obciążenia strony
Utrzymanie serwerów pod strony internetowe jest sporym kosztem, dlatego administratorzy próbują zminimalizować liczbę zapytań, które jest obsługiwane przez serwery.
Rozwiązaniem tego problemu może być zlikwidowanie ruchu pochodzącego od botów, a nie prawdziwych użytkowników. Jeżeli web scraper masowo wykonuje requesty do strony internetowej, zbanowanie go znacząco zredukuje ruch na stronie.
Ten powód banowania użytkowników występuje szczególnie w przypadku mniejszych stron.
Jak strony wykrywają rodzaj ruchu?
Jest naprawdę wiele sposobów wykrywania czy ruch na stronie pochodzi od botów czy rzeczywistych użytkowników.
Przedstawię Ci kilka najpopularniejszych.
Nagłówki HTTP
Analizując nagłówki HTTP możemy wykluczyć część ruchu pochodzącego od botów.
Porównajmy jak wyglądają nagłówki domyślnie robiąc request przy użyciu Pythona
{'args': {},
'headers': {'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Host': 'httpbin.org',
'User-Agent': 'python-requests/2.26.0',
'origin': '...',
'url': 'http://httpbin.org/get'}
oraz jak wyglądają przy wykonywaniu żądania z poziomu przeglądarki
{'args': {},
'headers': {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7',
'Host': 'httpbin.org',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/106.0.0.0 Safari/537.36',
'origin': '...',
'url': 'http://httpbin.org/get'}
Gdy ktoś scrapując nie zmieni tych nagłówków, wtedy scraper staje się banalny do wykrycia. Oczywiście łatwo to obejść.
Nagłówki to pierwsza do zastosowania i najłatwiejsza metoda zmniejszająca wykrywalność scrapowania. W dzisiejszych czasach to właściwie metoda must-have. Jeżeli jeszcze nie używasz odpowiednich nagłówków HTTP – zdecydowanie zacznij to robić.
Zachowanie użytkownika
Kolejnym prostym sposobem na odróżnienie bota od prawdziwego użytkownika jest analiza jego zachowań na stronie.
Mała jest szansa, że użytkownik z przeglądarki będzie wchodził na 10 stron w przeciągu 2 sekund. Gdy na serwerze pojawi się taka aktywność, system anty-scrapingowe zazwyczaj wtedy banują takiego użytkownika.
Przechodzenie całej witryny również potrafi wskazać na ruch bota. Raczej niewiele użytkowników przegląda całą stronę, przechodząc po kolei po każdej pozycji menu, wchodząc w każdy link.
Scrapując powinniśmy zachować się w sposób jak najbardziej zbliżony do zachowania prawdziwego użytkownika. Crawlujmy strony w sposób, jaki robilibyśmy to ręcznie, nie przeginajmy również z nadmierną szybkością scrapowania.
Renderowanie JS
Innym bardzo często używanym mechanizmem jest sprawdzenie, czy użytkownik wykonuje kod JS. Jeżeli nie, serwery często uznają takiego użytkownika za bota i banują go.
Oczywiście wejście na stronę bez JSa nie skończy się banem, gdyż niektórzy użytkownicy celowo chcą korzystać z internetu bez wykorzystania dodatkowych skryptów, aby uniknąć wszechobecnego dziś śledzenia.
Jeżeli jednak requesty będą się powtarzać, a użytkownik będzie korzystał ze strony w sposób, do którego przy normalnym użyciu wymagany jest JS, prawdopodobnie zostaniemy zablokowani.
Warto korzystać z narzędzi pozwalających na renderowanie kodu JS na stronach, np. Selenium, o którym pisałem tutaj, lub Playwright.
Pułapki
Innym mniej popularnym sposobem jest stosowanie pułapek, tzw. honeypot traps.
Są to elementy strony stworzone tylko po to, aby odróżnić boty od użytkowników, gdyż dla drugich są całkowicie niewidzialne.
Przykładem czegoś takiego może być link wyglądający jak zwykły link w menu, jednak nie będzie on widoczny. W takiej sytuacji bot pobierający dane np. po klasie CSS kliknie link. W hiperłączu może być wtedy zawarty mechanizm, który wywoła akcje na serwerze i zbanuje użytkownika, który w nie kliknął.
Stosowanie takiej metody jest jednak niezgodne z wymogami Google. Największa wyszukiwarka „zakazuje” przemycania na stronie tekstu, który jest niewidoczny. Jest to praktyka tzw. black hat SEO.
Zastosowanie takiego mechanizmu w najgorszym wypadku może nawet zakończyć się całkowitym wyindeksowaniem witryny z wyników wyszukiwania.
9 porad jak zminimalizować ryzyko bycia zbanowanym w web scrapingu
Oto kilka prostych reguł jak zminimalizować ryzyko bycia zbanowanym oraz jak zmniejszyć utrudnienia wynikające z banów.
- Stosuj proxy
- Nie wykonuj zbyt wielu requestów z jednego IP w krótkim odstępie czasu
- Używaj odpowiednich nagłówków HTTP
- Stosuj JS rendering
- Zmieniaj adresy IP
- Respektuj zalecenia z pliku robots.txt
- Korzystaj z cachowania stron
- Korzystaj z API (o ile to możliwe)
- Naśladuj aktywność prawdziwego użytkownika