Uwaga: ponieważ pełna wersja tej odpowiedzi przekracza limit długości przepełnienia stosu, musisz udać się do GitHub, aby przeczytać rozszerzoną wersję z dodatkowymi wskazówkami i szczegółami.
W celu utrudnienia skrobanie (znany również jako Webscraping , screen scraping , eksploracji danych Web , zbioru Web lub pobierania danych w sieci Web ), warto wiedzieć, jak te Skrobaki, a co za tym idzie, co uniemożliwia im pracę dobrze.
Istnieją różne rodzaje skrobaków, a każdy działa inaczej:
Pająki, takie jak bot Google lub kopiarki internetowe, takie jak HTtrack , które rekurencyjnie podążają za linkami do innych stron w celu uzyskania danych. Są one czasami używane do ukierunkowanego skrobania w celu uzyskania określonych danych, często w połączeniu z analizatorem składni HTML w celu wyodrębnienia pożądanych danych z każdej strony.
Skrypty powłoki: Czasami do skrobania używane są popularne narzędzia uniksowe: Wget lub Curl do pobierania stron i Grep (Regex) do wyodrębniania danych.
Parsery HTML, takie jak oparte na Jsoup, Scrapy i inne. Podobnie do tych opartych na wyrażeniach regularnych opartych na skryptach powłoki, działają one poprzez wyodrębnianie danych ze stron opartych na wzorcach w HTML, zwykle ignorując wszystko inne.
Na przykład: jeśli Twoja witryna ma funkcję wyszukiwania, taki skrobak może przesłać żądanie wyszukiwania, a następnie uzyskać wszystkie linki wyników i ich tytuły ze strony HTML strony wyników, aby uzyskać tylko linki wyników wyszukiwania i ich tytuły . Są to najczęstsze.
Wygaszacze ekranu, na podstawie np. Selenium lub PhantomJS , które otwierają witrynę w prawdziwej przeglądarce, uruchamiają JavaScript, AJAX itd., A następnie pobierają pożądany tekst ze strony, zwykle przez:
Pobieranie HTML z przeglądarki po załadowaniu strony i uruchomieniu JavaScript, a następnie użycie parsera HTML do wyodrębnienia pożądanych danych. Są to najczęstsze i tutaj działa również wiele metod niszczenia parserów / skrobaków HTML.
Wykonanie zrzutu ekranu renderowanych stron, a następnie użycie OCR do wyodrębnienia pożądanego tekstu ze zrzutu ekranu. Są to rzadkie i skonfigurują to tylko dedykowane skrobaki, które naprawdę chcą twoich danych.
Usługi Webscraping takie jak ScrapingHub lub Kimono . W rzeczywistości są ludzie, których zadaniem jest dowiedzieć się, jak zeskrobać witrynę i wyciągnąć zawartość, aby inni mogli z niej korzystać.
Nic dziwnego, że najtrudniejsze jest zniechęcenie profesjonalnych usług skrobania, ale jeśli utrudnisz i zajmiesz dużo czasu, aby dowiedzieć się, jak zeskrobać witrynę, ci (i ludzie, którzy za to płacą) nie mogą zadawać sobie trudu, aby zeskrobać witrynę.
Osadzanie witryny na stronach innych witryn za pomocą ramek i osadzanie witryny w aplikacjach mobilnych.
Aplikacje mobilne (Android i iOS) nie są technicznie skrobane, ale mogą osadzać strony internetowe i wstrzykiwać niestandardowe pliki CSS i JavaScript, co całkowicie zmienia wygląd stron.
Kopiowanie przez człowieka - wklejanie: ludzie będą kopiować i wklejać Twoje treści, aby użyć ich w innym miejscu.
Różne rodzaje skrobaków nakładają się na siebie, a wiele skrobaków będzie zachowywać się podobnie, nawet jeśli będą używać różnych technologii i metod.
Te wskazówki to przede wszystkim moje własne pomysły, różne trudności, które napotkałem podczas pisania skrobaków, a także fragmenty informacji i pomysłów z różnych stron.
Jak zatrzymać skrobanie
Nie można całkowicie temu zapobiec , ponieważ cokolwiek zrobisz, zdecydowane skrobaki nadal mogą dowiedzieć się, jak skrobać. Możesz jednak zatrzymać wiele skrobania, wykonując kilka czynności:
Monitoruj swoje dzienniki i wzorce ruchu; ogranicz dostęp, jeśli zobaczysz nietypową aktywność:
Regularnie sprawdzaj dzienniki, a w przypadku nietypowej aktywności wskazującej na automatyczny dostęp (skrobaki), takiej jak wiele podobnych działań z tego samego adresu IP, możesz zablokować lub ograniczyć dostęp.
W szczególności niektóre pomysły:
Ograniczenie stawki:
Zezwalaj tylko użytkownikom (i zgarniaczom) na wykonywanie ograniczonej liczby działań w określonym czasie - na przykład zezwalaj tylko na kilka wyszukiwań na sekundę z dowolnego określonego adresu IP lub użytkownika. Spowolni to zgarniacze i sprawi, że będą nieskuteczne. Możesz także wyświetlić captcha, jeśli akcje są wykonywane zbyt szybko lub szybciej niż zrobiłby to prawdziwy użytkownik.
Wykryj nietypową aktywność:
Jeśli zauważysz nietypową aktywność, taką jak wiele podobnych żądań z określonego adresu IP, ktoś przeglądający nadmierną liczbę stron lub wykonujący nietypową liczbę wyszukiwań, możesz uniemożliwić dostęp lub pokazać captcha dla kolejnych żądań.
Nie tylko monitoruj i ograniczaj stawki według adresu IP - użyj także innych wskaźników:
Jeśli blokujesz lub ograniczasz stawkę, nie rób tego tylko na podstawie adresu IP; możesz użyć innych wskaźników i metod do identyfikacji konkretnych użytkowników lub zgarniaczy. Niektóre wskaźniki, które mogą pomóc Ci zidentyfikować konkretnych użytkowników / skrobaki obejmują:
Jak szybko użytkownicy wypełniają formularze i gdzie klikają przycisk;
Za pomocą JavaScript można zebrać wiele informacji, takich jak rozmiar / rozdzielczość ekranu, strefa czasowa, zainstalowane czcionki itp. możesz użyć tego do identyfikacji użytkowników.
Nagłówki HTTP i ich kolejność, zwłaszcza User-Agent.
Na przykład, jeśli otrzymujesz wiele żądań z jednego adresu IP, wszyscy używają tego samego agenta użytkownika, rozmiaru ekranu (określonego w JavaScript), a użytkownik (w tym przypadku skrobaczka) zawsze klika przycisk w ten sam sposób i pod w regularnych odstępach czasu, prawdopodobnie jest to skrobak do ekranu; i możesz tymczasowo zablokować podobne żądania (np. zablokować wszystkie żądania z tym agentem użytkownika i rozmiar ekranu pochodzące z tego konkretnego adresu IP), w ten sposób nie będziesz utrudniać prawdziwym użytkownikom tego adresu IP, np. w przypadku wspólnego połączenia internetowego.
Możesz także pójść dalej, ponieważ możesz zidentyfikować podobne żądania, nawet jeśli pochodzą one z różnych adresów IP, co wskazuje na rozproszone skrobanie (skrobak korzystający z botnetu lub sieci serwerów proxy). Jeśli otrzymasz wiele identycznych poza tym żądań, ale pochodzą one z różnych adresów IP, możesz je zablokować. Ponownie pamiętaj, aby nie przypadkowo zablokować prawdziwych użytkowników.
Może to być skuteczne w przypadku wygaszaczy ekranu z JavaScriptem, ponieważ można uzyskać od nich wiele informacji.
Powiązane pytania dotyczące wymiany stosu zabezpieczeń:
Zamiast tymczasowo blokować dostęp, użyj Captcha:
Prostym sposobem na wdrożenie ograniczenia prędkości byłoby tymczasowe zablokowanie dostępu na określony czas, jednak użycie Captcha może być lepsze, zobacz sekcję Captchas w dalszej części.
Wymagaj rejestracji i logowania
Wymagaj utworzenia konta, aby wyświetlić zawartość, jeśli jest to możliwe w przypadku Twojej witryny. Jest to dobry środek odstraszający dla skrobaków, ale jest także dobry dla prawdziwych użytkowników.
- Jeśli potrzebujesz utworzenia konta i logowania, możesz dokładnie śledzić działania użytkownika i skrobaka. W ten sposób możesz łatwo wykryć, kiedy do skrobania używane jest określone konto, i zablokować je. Rzeczy takie jak ograniczanie stawek lub wykrywanie nadużyć (takie jak ogromna liczba wyszukiwań w krótkim czasie) stają się łatwiejsze, ponieważ możesz zidentyfikować określone skrobaki zamiast tylko adresów IP.
Aby uniknąć tworzenia skryptów przez wiele kont, należy:
Wymagaj adresu e-mail do rejestracji i zweryfikuj ten adres e-mail, wysyłając link, który należy otworzyć, aby aktywować konto. Zezwalaj tylko na jedno konto na adres e-mail.
Wymagaj rozwiązania captcha podczas rejestracji / tworzenia konta.
Wymaganie utworzenia konta w celu przeglądania treści odstraszy użytkowników i wyszukiwarki; jeśli chcesz utworzyć konto, aby wyświetlić artykuł, użytkownicy pójdą gdzie indziej.
Blokuj dostęp do adresów IP hostingu w chmurze i skrobania
Czasami skrobaki będą uruchamiane z usług hostingowych, takich jak Amazon Web Services lub GAE lub VPSes. Ogranicz dostęp do swojej witryny (lub pokaż captcha) dla żądań pochodzących z adresów IP używanych przez takie usługi hostingu w chmurze.
Podobnie można również ograniczyć dostęp z adresów IP używanych przez dostawców proxy lub VPN, ponieważ skrobaki mogą używać takich serwerów proxy, aby uniknąć wykrycia wielu żądań.
Uwaga: blokując dostęp z serwerów proxy i VPN, negatywnie wpłyniesz na prawdziwych użytkowników.
Jeśli blokujesz, twój komunikat o błędzie powinien być nieokreślony
Jeśli blokujesz / ograniczasz dostęp, powinieneś upewnić się, że nie mówisz skrobaczce, co spowodowało blok, dając tym samym wskazówki, jak naprawić skrobak. Dlatego złym pomysłem byłoby pokazanie stron błędów zawierających tekst:
Zbyt wiele żądań z Twojego adresu IP, spróbuj ponownie później.
Błąd, nagłówek agenta użytkownika nie jest obecny!
Zamiast tego pokaż przyjazny komunikat o błędzie, który nie informuje zgarniacza, co go spowodowało. Coś takiego jest znacznie lepsze:
- Przepraszam, coś poszło nie tak. Jeśli
helpdesk@example.com
problem będzie się powtarzał, możesz skontaktować się z pomocą techniczną za pośrednictwem .
Jest to również o wiele bardziej przyjazne dla prawdziwych użytkowników, jeśli kiedykolwiek zobaczą taką stronę błędu. Powinieneś również rozważyć pokazanie captcha dla kolejnych żądań zamiast twardego bloku, na wypadek, gdyby prawdziwy użytkownik zobaczył komunikat o błędzie, abyś nie blokował, a tym samym nie skontaktował się z tobą.
Skorzystaj z Captchas, jeśli podejrzewasz, że dostęp do Twojej witryny uzyskuje skrobak.
Captchas („Całkowicie zautomatyzowany test odróżniający komputery i ludzi od siebie”) jest bardzo skuteczny przeciwko zatrzymywaniu skrobaków. Niestety są one również bardzo skuteczne w irytacji użytkowników.
Jako takie są przydatne, gdy podejrzewasz możliwą zgarniacz i chcesz zatrzymać zgarnianie, nie blokując również dostępu na wypadek, gdyby nie był to zgarniacz, ale prawdziwy użytkownik. Jeśli podejrzewasz zgarniacz, możesz rozważyć wyświetlenie captcha przed zezwoleniem na dostęp do treści.
O czym należy pamiętać podczas korzystania z Captchas:
Nie używaj własnych, użyj czegoś takiego jak reCaptcha Google : jest to o wiele łatwiejsze niż samodzielne wdrażanie captcha, jest bardziej przyjazne dla użytkownika niż niektóre rozmyte i wypaczone rozwiązania tekstowe, które możesz sam wymyślić (użytkownicy często muszą tylko zaznaczyć pole ), a scripterowi trudniej jest rozwiązać niż prosty obraz wyświetlany z Twojej witryny
Nie dołączaj rozwiązania captcha do znaczników HTML: faktycznie widziałem jedną stronę internetową, która miała rozwiązanie dla captcha na samej stronie (chociaż całkiem dobrze ukryte), co czyni ją całkiem bezużyteczną. Nie rób czegoś takiego. Ponownie skorzystaj z usługi takiej jak reCaptcha, a nie będziesz mieć tego rodzaju problemu (jeśli użyjesz go prawidłowo).
Captchas można rozwiązać luzem: istnieją usługi rozwiązywania captcha, w których faktyczni, nisko opłacani ludzie rozwiązują captchas luzem. Ponownie, dobrym pomysłem jest użycie reCaptcha, ponieważ mają one zabezpieczenia (takie jak stosunkowo krótki czas, jaki użytkownik ma na rozwiązanie captcha). Tego rodzaju usługa prawdopodobnie nie będzie używana, chyba że Twoje dane są naprawdę cenne.
Podaj treść tekstową jako obraz
Możesz renderować tekst po stronie serwera obrazu i wyświetlać go, co utrudni wydobycie tekstu przez proste skrobaki.
Jest to jednak złe dla czytników ekranu, wyszukiwarek, wydajności i praktycznie wszystkiego innego. W niektórych miejscach jest to również nielegalne (ze względu na dostępność, np. Ustawa o Amerykanach z niepełnosprawnościami), a także z łatwością można ominąć niektóre OCR, więc nie rób tego.
Możesz zrobić coś podobnego ze sprite'ami CSS, ale ma to te same problemy.
Nie ujawniaj pełnego zestawu danych:
Jeśli to wykonalne, nie udostępniaj skryptowi / botowi sposobu na pobranie całego zestawu danych. Jako przykład: masz witrynę z aktualnościami, zawierającą wiele indywidualnych artykułów. Możesz sprawić, by te artykuły były dostępne tylko poprzez wyszukiwanie ich za pomocą wyszukiwania w witrynie, a jeśli nie masz listy wszystkich artykułów w witrynie i ich adresów URL w dowolnym miejscu, artykuły te będą dostępne tylko za pomocą wyszukiwania funkcja. Oznacza to, że skrypt, który chce usunąć wszystkie artykuły z Twojej witryny, będzie musiał wyszukać wszystkie możliwe frazy, które mogą pojawić się w Twoich artykułach, aby znaleźć je wszystkie, co będzie czasochłonne, okropnie nieefektywne i, miejmy nadzieję, spowoduje skrobaczka się poddaje.
Będzie to nieskuteczne, jeśli:
- Bot / skrypt i tak nie chce / potrzebuje pełnego zestawu danych.
- Twoje artykuły są dostarczane z adresu URL, który wygląda mniej więcej tak
example.com/article.php?articleId=12345
. To (i podobne rzeczy), które pozwolą skrobakom po prostu iterować wszystkie articleId
s i żądać wszystkich artykułów w ten sposób.
- Istnieją inne sposoby, aby w końcu znaleźć wszystkie artykuły, na przykład pisząc skrypt, aby podążać za linkami w artykułach, które prowadzą do innych artykułów.
- Wyszukiwanie czegoś takiego jak „i” lub „the” może ujawnić prawie wszystko, więc należy o tym pamiętać. (Można tego uniknąć, zwracając tylko 10 lub 20 najlepszych wyników).
- Potrzebujesz wyszukiwarek, aby znaleźć swoje treści.
Nie ujawniaj swoich interfejsów API, punktów końcowych i podobnych rzeczy:
Upewnij się, że nie ujawniasz żadnych interfejsów API, nawet przypadkowo. Na przykład, jeśli używasz AJAX lub żądań sieciowych z poziomu Adobe Flash lub apletów Java (Boże, nie wolno!) Do załadowania swoich danych, trywialne jest przeglądanie żądań sieciowych ze strony i ustalenie, dokąd zmienią te żądania, i następnie dokonaj inżynierii wstecznej i użyj tych punktów końcowych w programie zgarniającym. Upewnij się, że zaciemniasz punkty końcowe i utrudniasz innym korzystanie z nich, zgodnie z opisem.
Aby powstrzymać parsery HTML i skrobaki:
Ponieważ parsery HTML działają poprzez wyodrębnianie treści ze stron na podstawie identyfikowalnych wzorców w HTML, możemy celowo zmieniać te wzorce w celu złamania tych skrobaków, a nawet przykręcić je. Większość tych wskazówek dotyczy także innych skrobaków, takich jak pająki i skrobaczki.
Często zmieniaj swój HTML
Skrobaki, które przetwarzają HTML bezpośrednio, robią to poprzez wydobywanie zawartości z określonych, możliwych do zidentyfikowania części strony HTML. Na przykład: Jeżeli wszystkie strony na swojej stronie mają div
z identyfikatorem article-content
, który zawiera tekst artykułu, to jest trywialne napisać skrypt, aby odwiedzić wszystkie strony artykuł na swojej stronie, i wyodrębnić treści tekstu article-content
div na każdej stronie artykułu i voilà, skrobaczka zawiera wszystkie artykuły z Twojej witryny w formacie, który można ponownie wykorzystać w innym miejscu.
Jeśli często zmieniasz HTML i strukturę swoich stron, takie skrobaki przestaną działać.
Możesz często zmieniać id i klasy elementów w swoim HTML, być może nawet automatycznie. Jeśli więc div.article-content
coś się div.a4c36dda13eaf0
zmieni i zmienia się co tydzień, skrobak będzie działał dobrze na początku, ale zepsuje się po tygodniu. Pamiętaj, aby zmienić również długość swoich identyfikatorów / klas, w przeciwnym razie skrobak użyje div.[any-14-characters]
zamiast tego żądanego div. Uważaj też na inne podobne dziury ..
Jeśli nie ma sposobu, aby znaleźć pożądaną treść ze znaczników, skrobak zrobi to ze struktury HTML. Tak więc, jeśli wszystkie strony artykułów są podobne pod tym względem, że każde div
wnętrze, div
które następuje po h1
tekście, to skrobaczki otrzymają treść artykułu na podstawie tego. Ponownie, aby temu zaradzić, możesz dodawać / usuwać dodatkowe znaczniki do swojego HTML, okresowo i losowo, np. dodając dodatkowe div
s lub span
s. Przy nowoczesnym przetwarzaniu HTML po stronie serwera nie powinno to być zbyt trudne.
Rzeczy, o których należy pamiętać:
Będzie to uciążliwe i trudne do wdrożenia, utrzymania i debugowania.
Utrudnisz buforowanie. Zwłaszcza jeśli zmienisz identyfikatory lub klasy elementów HTML, będzie to wymagać odpowiednich zmian w plikach CSS i JavaScript, co oznacza, że za każdym razem, gdy je zmienisz, będą musiały być ponownie pobierane przez przeglądarkę. Spowoduje to wydłużenie czasu ładowania strony dla powtarzających się użytkowników i zwiększenie obciążenia serwera. Jeśli zmienisz to tylko raz w tygodniu, nie będzie to dużym problemem.
Sprytne skrobaki nadal będą mogły uzyskać twoją treść, wywnioskując, gdzie jest rzeczywista zawartość, np. wiedząc, że duży pojedynczy blok tekstu na stronie prawdopodobnie będzie prawdziwym artykułem. Dzięki temu nadal można znaleźć i wyodrębnić pożądane dane ze strony. Boilerpipe właśnie to robi.
Zasadniczo upewnij się, że skryptowi nie jest łatwo znaleźć rzeczywistą pożądaną treść dla każdej podobnej strony.
Zobacz także Jak zapobiec przeszukiwaczom zależnym od XPath pobierania zawartości strony, aby dowiedzieć się, jak można to zaimplementować w PHP.
Zmień kod HTML na podstawie lokalizacji użytkownika
Jest to trochę podobne do poprzedniej wskazówki. Jeśli podajesz inny kod HTML w zależności od lokalizacji / kraju użytkownika (określonego na podstawie adresu IP), może to spowodować uszkodzenie skrobaków dostarczanych użytkownikom. Na przykład, jeśli ktoś pisze aplikację mobilną, która usuwa dane z Twojej witryny, na początku będzie działała dobrze, ale zepsuje się, gdy zostanie faktycznie przekazana użytkownikom, ponieważ ci użytkownicy mogą znajdować się w innym kraju, a zatem otrzymają inny kod HTML, który osadzony skrobak nie został zaprojektowany do konsumpcji.
Często zmieniaj HTML, aktywnie wkręcaj skrobaki!
Przykład: w Twojej witrynie znajduje się funkcja wyszukiwania example.com/search?query=somesearchquery
, która zwraca następujący kod HTML:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
Jak zapewne zgadłeś, łatwo to zeskrobać: wystarczy, że skrobak trafi w wyszukiwany adres URL zapytaniem i wyodrębni pożądane dane ze zwróconego HTML. Oprócz okresowej zmiany HTML, jak opisano powyżej, możesz również zostawić stary znacznik ze starymi identyfikatorami i klasami, ukryć go za pomocą CSS i wypełnić fałszywymi danymi, tym samym zatruwając skrobak. Oto jak można zmienić stronę wyników wyszukiwania:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
Oznacza to, że skrobaczki napisane w celu wyodrębnienia danych z HTML na podstawie klas lub identyfikatorów będą nadal pozornie działać, ale otrzymają fałszywe dane, a nawet reklamy, dane, których prawdziwi użytkownicy nigdy nie zobaczą, ponieważ są ukryte w CSS.
Wkręć skrobaczką: wstaw do swojej strony fałszywe, niewidoczne dane typu plaster miodu
Dodając do poprzedniego przykładu, możesz dodać niewidoczne elementy typu plaster miodu do kodu HTML, aby złapać skrobaki. Przykład, który można dodać do poprzednio opisanej strony wyników wyszukiwania:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
Skrobaczka napisana, aby uzyskać wszystkie wyniki wyszukiwania, odbierze to, podobnie jak inne prawdziwe wyniki wyszukiwania na stronie, i przejdzie do linku w poszukiwaniu pożądanej treści. Prawdziwy człowiek nigdy nawet go nie zobaczy (ponieważ jest ukryty w CSS) i nie odwiedzi linku. Prawdziwy i pożądany pająk, taki jak Google, również nie odwiedzi linku, ponieważ nie zezwoliłeś /scrapertrap/
w pliku robots.txt.
Możesz scrapertrap.php
zrobić coś w rodzaju blokowania dostępu do adresu IP, który go odwiedził lub wymusić captcha dla wszystkich kolejnych żądań z tego adresu IP.
Nie zapomnij wyłączyć honeypot ( /scrapertrap/
) w pliku robots.txt, aby boty wyszukiwarek nie wpadały w niego.
Możesz / powinieneś połączyć to z poprzednią wskazówką częstego zmieniania kodu HTML.
Zmieniaj to również często, ponieważ skrobaki w końcu nauczą się tego unikać. Zmień adres URL i tekst honeypota. Warto również rozważyć zmianę wbudowanego CSS używanego do ukrywania i zamiast tego użyć atrybutu ID i zewnętrznego CSS, ponieważ skrobaki nauczą się unikać wszystkiego, co ma style
atrybut z CSS używanym do ukrywania zawartości. Spróbuj także włączać go tylko czasami, aby skrobak działał początkowo, ale po pewnym czasie pęka. Dotyczy to również poprzedniej wskazówki.
Złośliwi ludzie mogą uniemożliwić dostęp prawdziwym użytkownikom, udostępniając link do honeypota, a nawet umieszczając go gdzieś jako obraz (np. Na forum). Często zmieniaj adres URL i skracaj czas blokowania.
Podaj fałszywe i bezużyteczne dane, jeśli wykryjesz skrobak
Jeśli wykryjesz coś, co oczywiście jest skrobaczką, możesz podać fałszywe i bezużyteczne dane; spowoduje to uszkodzenie danych, które zgarniacz otrzymuje z Twojej witryny. Powinieneś również uniemożliwić odróżnienie takich fałszywych danych od danych rzeczywistych, aby skrobaczki nie wiedziały, że są przykręcone.
Na przykład: masz witrynę z wiadomościami; jeśli wykryjesz skrobak, zamiast blokować dostęp, podawaj fałszywe, losowo generowane artykuły, a to zatruwa dane, które dostaje skrobaczka. Jeśli sprawisz, że twoje fałszywe dane będą nierozróżnialne od rzeczywistych, utrudnisz skrobakom uzyskanie tego, czego chcą, a mianowicie rzeczywistych, rzeczywistych danych.
Nie akceptuj żądań, jeśli Agent użytkownika jest pusty / brakuje go
Często leniwie napisane skrobaczki nie wysyłają nagłówka User Agent z żądaniem, podczas gdy wszystkie przeglądarki, a także pająki wyszukiwarek.
Jeśli otrzymasz żądanie, w którym nagłówek agenta użytkownika nie jest obecny, możesz wyświetlić captcha lub po prostu zablokować lub ograniczyć dostęp. (Lub podaj fałszywe dane, jak opisano powyżej, lub coś innego ...)
Fałszywe jest to trywialne, ale jako środek przeciwko źle napisanym skrobakom warto je wdrożyć.
Nie akceptuj żądań, jeśli Agent użytkownika jest często skrobakiem; czarne listy używane przez skrobaki
W niektórych przypadkach skrobaki używają agenta użytkownika, którego nie używa żadna prawdziwa przeglądarka ani pająk wyszukiwarki, na przykład:
- „Mozilla” (po prostu nic więcej. Widziałem tutaj kilka pytań na temat skrobania, używania tego. Prawdziwa przeglądarka nigdy tego nie używa)
- „Java 1.7.43_u43” (Domyślnie Java HttpUrlConnection używa czegoś takiego).
- „BIZCO EasyScraping Studio 2.0”
- „wget”, „curl”, „libcurl”, .. (Wget i cURL są czasami używane do podstawowego skrobania)
Jeśli okaże się, że określony ciąg Agenta użytkownika jest używany przez skrobaki w Twojej witrynie i nie jest używany przez prawdziwe przeglądarki lub legalne pająki, możesz również dodać go do czarnej listy.
Jeśli nie żąda zasobów (CSS, obrazy), nie jest to prawdziwa przeglądarka.
Prawdziwa przeglądarka będzie (prawie zawsze) żądać i pobierać zasoby, takie jak obrazy i CSS. Parsery HTML i skrobaczki nie będą, ponieważ są zainteresowane tylko rzeczywistymi stronami i ich zawartością.
Możesz rejestrować żądania do swoich zasobów, a jeśli widzisz wiele żądań tylko HTML, może to być skrobak.
Uważaj, że roboty wyszukiwarek, starożytne urządzenia mobilne, czytniki ekranu i źle skonfigurowane urządzenia również nie mogą żądać zasobów.
Używaj i wymagaj plików cookie; używaj ich do śledzenia działań użytkownika i zgarniacza.
Możesz wymagać włączenia obsługi plików cookie w celu przeglądania swojej witryny. Odstraszy to niedoświadczonych i początkujących autorów skrobaków, jednak skrobak może łatwo wysłać ciasteczka. Jeśli ich użyjesz i będziesz ich potrzebować, możesz śledzić za ich pomocą działania użytkownika i skrobaka, a tym samym wdrażać ograniczenia, blokowanie lub pokazywanie captchas dla poszczególnych użytkowników zamiast dla poszczególnych adresów IP.
Na przykład: gdy użytkownik przeprowadza wyszukiwanie, ustaw unikalny plik cookie służący do identyfikacji. Podczas przeglądania stron wyników sprawdź ten plik cookie. Jeśli użytkownik otworzy wszystkie wyniki wyszukiwania (można rozpoznać po pliku cookie), prawdopodobnie jest to skrobak.
Używanie plików cookie może być nieskuteczne, ponieważ skrobaczki mogą również wysyłać pliki cookie wraz z żądaniami i odrzucać je w razie potrzeby. Uniemożliwisz również dostęp prawdziwym użytkownikom, którzy mają wyłączone pliki cookie, jeśli Twoja witryna obsługuje tylko pliki cookie.
Pamiętaj, że jeśli używasz JavaScript, aby ustawić i pobrać plik cookie, zablokujesz skrobaki, które nie uruchamiają JavaScript, ponieważ nie mogą pobrać i wysłać pliku cookie z ich żądaniem.
Użyj JavaScript + Ajax, aby załadować treść
Możesz użyć JavaScript + AJAX, aby załadować treść po wczytaniu samej strony. Spowoduje to, że treść będzie niedostępna dla parserów HTML, które nie uruchamiają JavaScript. Jest to często skuteczny środek odstraszający dla początkujących i niedoświadczonych programistów piszących skrobaki.
Być świadomym:
Wykorzystanie JavaScript do załadowania rzeczywistej zawartości pogorszy wrażenia użytkownika i wydajność
Wyszukiwarki mogą również nie obsługiwać JavaScript, co uniemożliwi indeksowanie treści. Może to nie stanowić problemu dla stron wyników wyszukiwania, ale może dotyczyć innych rzeczy, takich jak strony artykułów.
Ukryj znaczniki, żądania sieciowe ze skryptów i wszystko inne.
Jeśli używasz Ajax i JavaScript do ładowania danych, zaciemnij przesyłane dane. Na przykład możesz zakodować swoje dane na serwerze (czymś tak prostym jak base64 lub bardziej skomplikowane), a następnie zdekodować i wyświetlić je na kliencie, po pobraniu za pomocą Ajax. Oznacza to, że ktoś sprawdzający ruch sieciowy nie zobaczy od razu, jak działa twoja strona i ładuje dane, i trudniej będzie bezpośrednio poprosić o dane żądania z twoich punktów końcowych, ponieważ będzie musiał ponownie zaprojektować algorytm deszyfrowania.
Jeśli używasz Ajaxa do ładowania danych, powinieneś utrudnić korzystanie z punktów końcowych bez wcześniejszego ładowania strony, np. Wymagając klucza sesji jako parametru, który możesz osadzić w swoim JavaScript lub HTML.
Możesz również osadzić zaciemnione dane bezpośrednio na początkowej stronie HTML i użyć JavaScript do usunięcia z pamięci i wyświetlenia ich, co pozwoliłoby uniknąć dodatkowych żądań sieciowych. W ten sposób znacznie trudniej będzie wyodrębnić dane przy użyciu parsera opartego tylko na HTML, który nie uruchamia JavaScript, ponieważ ten, kto pisze skrobaczkę, będzie musiał zmodyfikować kod JavaScript (co również powinieneś zaciemnić).
Możesz regularnie zmieniać metody zaciemniania, aby złamać zgarniacze, którzy to wymyślili.
Istnieje jednak kilka wad zrobienia czegoś takiego:
Będzie to uciążliwe i trudne do wdrożenia, utrzymania i debugowania.
Będzie to nieskuteczne w stosunku do skrobaków i skrobaczek do ekranów, które faktycznie uruchamiają JavaScript, a następnie wyodrębniają dane. (Jednak najprostsze parsery HTML nie uruchamiają JavaScript)
Sprawi, że Twoja strona nie będzie działać dla prawdziwych użytkowników, jeśli mają wyłączoną obsługę JavaScript.
Obniży się wydajność i czas ładowania strony.
Nietechniczne:
Powiedz ludziom, żeby nie drapali, a niektórzy to uszanują
Znajdź prawnika
Udostępnij swoje dane, podaj interfejs API:
Możesz łatwo udostępnić swoje dane i wymagać przypisania oraz linku z powrotem do swojej witryny. Być może naliczymy za to $$$.
Różne:
Istnieją również komercyjne usługi ochrony przed skrobaniem, takie jak zapobieganie skrobaniu przez Cloudflare lub Distill Networks (szczegółowe informacje o tym, jak tu działa ), które wykonują te rzeczy i nie tylko.
Znajdź równowagę między użytecznością dla prawdziwych użytkowników a odpornością na skrobanie: wszystko, co robisz, wpłynie negatywnie na wrażenia użytkownika w taki czy inny sposób, znajdziesz kompromisy.
Nie zapomnij swojej witryny mobilnej i aplikacji. Jeśli masz aplikację mobilną, którą również można zeskrobać z ekranu, a ruch sieciowy można sprawdzić, aby określić używane przez niego punkty końcowe REST.
Skrobaki mogą zeskrobywać inne skrobaki: Jeśli istnieje jedna witryna internetowa z zawartością zeskrobaną z twojej, inne skrobaki mogą zeskrobać ze strony tego skrobaka.
Dalsza lektura: