Czy web scraping powinniśmy stosować zawsze? NIE. W tym artykule dowiesz się kiedy nie powinniśmy scrapować oraz dlaczego niektóre strony tego zakazują.
Na blogu pisałem już o web scrapingu w Pythonie oraz o tym dlaczego warto scrapować. Niestety, w rzeczywistości scrapowanie nie jest takie proste od strony prawnej i moralnej.
Własność intelektualna a web scraping
Dane zgromadzone w internecie są czyjąś własnością intelektualną. Prawo zapewnia właścicielowi treści możliwość określenia sposobu w jaki mogą (lub nie mogą) być wykorzystywane dane.
Jako użytkownicy internetu powinniśmy uszanować to prawo i nie pobierać danych tam gdzie właściciele sobie tego nie życzą.
Które dane można scrapować?
Wchodząc na stronę internetową na pierwszy rzut oka nie wiemy czy poszczególne dane można scrapować.
Jak dowiedzieć się czy możemy pobierać dane ze strony?
Warunki użytkowania
Na większości stron internetowych opracowane są warunki użytkowania strony (ToU – Terms of Usage). Jeżeli dokumentu o takiej nazwie nie ma to zapewne wzmianki, których poszukujesz znajdują się po prostu w regulaminie witryny.
W wielu takich dokumentach możemy znaleźć podobny zapis:
Powyższy fragment regulaminu skopiowałem ze strony olx. Nie będę tutaj próbował dokonywać analizy zapisu od strony prawnej, gdyż po prostu się na tym nie znam.
Jednoznacznie możemy jednak wywnioskować, że nie powinniśmy pobierać żadnych danych dostępnych w serwisie bez zgody udzielonej ze strony serwisu.
Każdorazowo zabronione jest również agregacja danych i ich przetwarzanie.
W praktyce oznacza to, że nie możemy stworzyć własnej bazy danych samochodów, których dane pobraliśmy z ogłoszeń serwisu z ogłoszeniami motoryzacyjnymi.
Pierwszym krokiem, który musisz poczynić zanim zaczniesz web scraping powinno być właśnie zerknięcie w regulamin i poszukanie podobno brzmiącego zapisu.
Niestety dla web scraperów, takie zapisy znajdują się w regulaminach wielu serwisów.
robots.txt
Znalezienie regulaminu wymaga chwili uważnego przeglądania witryny. Co więcej, kierowany jest on do ludzi i jest pisany językiem naturalnym, trudnym do przetwarzania dla programów komputerowych.
Jak już pisałem w artykule „Jak działają boty Google? Web crawling” ponad połowa użytkowników internetu to boty. Boty, które nie zrozumieją tekstu naturalnego. Nie będą one szukały regulaminów na podstronach witryny i się w nie wgryzały.
W celu szybkiego przekazania botom informacji, które strony w danej witrynie mogą zwiedzać wykorzystywany jest specjalny plik – robots.txt.
Składnia
Jest to ustandaryzowany sposób przekazywania botom informacji o stronach, na które mogą wchodzić, jak i o tych, na które nie powinny. Przykład pliku robots.txt:
# Grupa 1
User-agent: Googlebot
Disallow: /nogooglebot/
# Grupa 2
User-agent: *
Allow: /
Sitemap: http://www.example.com/sitemap.xml
Powyższy kod sprawi, że boty Googla (a dokładniej mówiąc boty, które mają ustawioną wartość nagłówka „User-agent” na „Googlebot”) nie będą mogły wejść na stronę http://www.example.com/nogooglebot/.
Zapis w grupie 2 oznacza, że wszystkie boty mogą wchodzić na wszystkie strony (oprócz Googlebot’a, który nie może wchodzić na wskazaną wyżej stronę).
web scraping a robots.txt
Jak plik robots.txt ma się do web scrapingu? Tworząc własnego bota przechodzącego po stronach internetowych powinniśmy respektować dyrektywy zapisane w tym pliku.
W pliku tym możesz znaleźć na przykład taki zapis:
User-agent: *
Disallow: /portal/
Co oznacza, że każdy bot powinien omijać stronę /portal/ oraz wszystkie podkatalogi znajdujące się w niej.
Jeżeli strona jest zabroniona do odwiedzania przez boty, tym bardziej nie powinniśmy na niej scrapować.
Blokady
Niektóre witryny dość poważnie podchodzą do zabraniania poruszania się botów po stronach internetowych. Bardzo często wejśćie na takie strony jako bot skończy się czasową blokadą dostępu nałożoną na adres IP.
Dalsze próby odwiedzania strony mogą skutkować permanentnym zablokowaniem możliwości korzystania z niej dla danego adresu.
Jak te strony wykrywają, która aktywność pochodzi od botów?
Najpopularniejszą praktyką jest rozpoznawanie nagłówka User-agent.
Innym, bardziej zaawansowanym sposobem jest wykrywanie w jaki sposób użytkownik wchodzący na stronę obsługuje kod JavaScript.
Jak może skończyć się nieuczciwy web scraping?
W 2019 roku BusinessInsider opublikował naprawdę głośny artykuł o firmach, które scrapują dane z serwisu Instagram w sposób niezgodny z regulaminem.
W zestawieniu znalazły się firmy, które między innymi zachowują instagram stories, których możliwość wyświetlenia z założenia powinna być ograniczona czasowo.
Na liście znalazła się również polska firma Brand24, która pobierała jedynie publiczne wzmianki po hashtagach. Niesłuszna moim zdaniem decyzja o zamieszczeniu polskiego narzędzia w tym niekorzystnym towarzystwie przyczyniła się do problemów przedsiębiorstwa.
Firmowe konta na Facebooku i Instagramie zostały zablokowane, podobny los spotkał również prywatne konta założyciela – Michała Sadowskiego.
Fanpage nie był głównym źródłem ruchu aplikacji, jednak zamieszanie przełożyło się na spadek cen akcji spółki o 42% w perspektywie 3 miesięcy.
Co więcej, konta firmy na Facebooku i Instagramie nadal pozostają zablokowane.
Podsumowanie
Chcąc scrapować w internecie musimy zwracać uwagę na bardzo wiele rzeczy.
Przed próbami scrapowania powinieneś:
- Przeczytać regulamin strony
- Przeanalizować plik robots.txt
- Sprawdzić, kiedy strona może mieć największy ruch i omijać ten czas
- Po prostu pomyśleć o właścicielach witryny 🙂
Wszystko to znacznie utrudnia proces crawlowania i scrapowania stron, który z definicji powinien być zautomatyzowany. Pomimo tego, chcąc działać w pełni legalnie i zgodnie z regulaminem powinieneś zainteresować się czy dana strona zezwala na scrapowanie danych.
Zdecydowanie nigdy nie zachęcam do scrapowania i crawlowania stron internetowych wbrew regulaminowi.
Dzięki, że dotrwałeś do końca tego artykułu! 😉 Daj znać czy Ci się podobał oraz czy chcesz więcej na ten temat 🙂
A właśnie… Czy Ty pobrałeś już dokument o przydatnych bibliotekach w Pythonie, który znajdziesz na stronie głównej bloga? Jeśli nie to zrób to teraz 😉
Pozdrawiam!
Kamil Kwapisz