Mam dość dużą stronę internetową z muzyką i dużą bazą danych artystów. Zauważyłem, że inne witryny muzyczne skrobią dane z naszej witryny (tu i tam wpisuję fałszywe nazwiska artystów, a następnie wyszukuję je w Google).
Jak mogę zapobiec skrobaniu ekranu? Czy to w ogóle możliwe?
Odpowiedzi:
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ń:
Jak jednoznacznie zidentyfikować użytkowników o tym samym zewnętrznym adresie IP? po więcej szczegółów i
Dlaczego ludzie używają zakazów adresów IP, gdy adresy IP często się zmieniają? aby uzyskać informacje na temat ograniczeń tych metod.
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.
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:
[email protected]
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:
example.com/article.php?articleId=12345
. To (i podobne rzeczy), które pozwolą skrobakom po prostu iterować wszystkiearticleId
s i żądać wszystkich artykułów w ten sposób.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 identyfikatoremarticle-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 tekstuarticle-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żyjediv.[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 poh1
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 dodatkowediv
s lubspan
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: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:
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:
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:
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:
Artykuł Wikipedii na temat skrobania stron internetowych . Wiele szczegółów na temat zaangażowanych technologii i różnych rodzajów skrobaka sieciowego.
Powstrzymywanie skryptów przed trzaskaniem twojej witryny setki razy na sekundę . Pytania i odpowiedzi dotyczące bardzo podobnego problemu - boty sprawdzające stronę internetową i kupujące rzeczy, gdy tylko trafią do sprzedaży. Wiele istotnych informacji, szczególnie. na Captchas i ograniczanie prędkości.
źródło
A real browser will (almost always) request and download assets such as images and CSS
dotyczy to również czytników ułatwień dostępu? CAPTCHA jest zepsuta, więc prawdopodobnie nie przeszkadza to profesjonalnym usługom. Korzystanie z plików cookie wymaga powiadomienia / zgody w UE.Find a balance between usability for real users and scraper-proofness
zrównoważ także czas / złożoność programowania w porównaniu do korzyści finansowych.Zakładam, że skonfigurowałeś
robots.txt
.Jak wspomnieli inni, skrobaczki mogą podrobić prawie każdy aspekt ich działalności i prawdopodobnie bardzo trudno jest zidentyfikować żądania pochodzące od złych facetów.
Rozważyłbym:
/jail.html
.robots.txt
(aby pełne szacunku pająki nigdy nie odwiedzą).display: none
)./jail.html
.Może to pomóc w szybkiej identyfikacji żądań zgarniaczy, które rażąco ignorują twoje
robots.txt
.Warto również, aby Państwa
/jail.html
całą całą stronę internetową, która ma taką samą, jak dokładnie znaczników normalnych stron, ale z danymi (fałszywe/jail/album/63ajdka
,/jail/track/3aads8
itp). W ten sposób złe skrobaki nie będą powiadamiane o „nietypowych danych wejściowych”, dopóki nie będziesz mieć szansy ich całkowitego zablokowania.źródło
Pozwać ich.
Poważnie: jeśli masz trochę pieniędzy, porozmawiaj z dobrym, miłym, młodym prawnikiem, który zna się na internetach. Naprawdę możesz tu coś zrobić. W zależności od tego, gdzie znajdują się strony, prawnik może napisać zaprzestanie działalności lub jej odpowiednik w Twoim kraju. Możesz być w stanie przynajmniej przestraszyć drani.
Udokumentuj wstawienie wartości fikcyjnych. Wstaw wartości zastępcze, które wyraźnie (ale niejasno) wskazują na Ciebie. Myślę, że jest to powszechna praktyka w firmach zajmujących się książkami telefonicznymi, a tutaj, w Niemczech, zdarzyło się kilka przypadków, kiedy naśladowcy zostali wykradzeni przez fałszywe wpisy, które skopiowali 1: 1.
Byłoby szkoda, gdyby to jeździć na brudząc się kod HTML, ciągnąc w dół SEO, ważności i innymi (choć system szablonów, które stosuje nieco inną strukturę HTML na każdą prośbę o identycznych stron może już pomóc dużo przed skrobaki, które zawsze opierają się na strukturach HTML i nazwach klas / identyfikatorów, aby uzyskać zawartość).
Takie przypadki są dobre dla praw autorskich. Oszukiwanie uczciwej pracy innych ludzi w celu zarabiania pieniędzy jest czymś, z czym powinieneś być w stanie walczyć.
źródło
Naprawdę nic nie możesz zrobić, aby całkowicie temu zapobiec. Skrobaki mogą sfałszować swojego agenta użytkownika, używać wielu adresów IP itp. I wyglądać jak zwykły użytkownik. Jedyne, co możesz zrobić, to sprawić, by tekst nie był dostępny podczas ładowania strony - uczyń go obrazem, flashem lub załaduj JavaScript. Jednak pierwsze dwa są złymi pomysłami, a ostatni byłby problem z dostępnością, gdyby JavaScript nie był włączony dla niektórych zwykłych użytkowników.
Jeśli całkowicie zarzucają twoją stronę i przeglądają wszystkie twoje strony, możesz zastosować pewien rodzaj ograniczenia stawki.
Jest jednak nadzieja. Skrobaki polegają na tym, że dane Twojej witryny mają spójny format. Jeśli uda ci się to jakoś losowo, może to uszkodzić ich skrobak. Rzeczy takie jak zmiana identyfikatora lub nazw klas elementów strony przy każdym ładowaniu itp. Ale to dużo pracy i nie jestem pewien, czy warto. I nawet wtedy prawdopodobnie mogliby obejść to z wystarczającym poświęceniem.
źródło
Podaj interfejs API XML, aby uzyskać dostęp do swoich danych; w sposób prosty w użyciu. Jeśli ludzie chcą twoich danych, dostaną je, równie dobrze możesz wyjść na całość.
W ten sposób możesz zapewnić podzbiór funkcji w skuteczny sposób, upewniając się, że przynajmniej skrobaczki nie będą żłobieć żądań HTTP i ogromnej przepustowości.
Następnie wystarczy przekonać osoby, które chcą, aby Twoje dane korzystały z interfejsu API. ;)
źródło
Niestety, naprawdę ciężko to zrobić ...
Sugeruję, aby uprzejmie poprosić ich, aby nie korzystali z twoich treści (jeśli twoje treści są chronione prawem autorskim).
Jeśli tak jest, a oni go nie zdejmą, możesz podjąć dalsze działania i wysłać im list o zaprzestaniu działalności .
Ogólnie rzecz biorąc, cokolwiek zrobisz, aby zapobiec skrobaniu, prawdopodobnie skończy się bardziej negatywnym efektem, np. Dostępność, boty / pająki itp.
źródło
Ok, jak mówią wszystkie posty, jeśli chcesz uczynić go przyjaznym dla wyszukiwarek, boty mogą na pewno zeskrobać.
Ale nadal możesz zrobić kilka rzeczy i może to mieć wpływ na 60-70% botów zgarniających.
Stwórz skrypt sprawdzający jak poniżej.
Jeśli dany adres IP odwiedza się bardzo szybko, po kilku wizytach (5–10) umieść swój adres IP + informacje o przeglądarce w pliku lub bazie danych.
Następny krok
(Byłby to proces działający w tle i działający cały czas lub zaplanowany po kilku minutach.) Stwórz sobie kolejny skrypt, który będzie sprawdzał podejrzane adresy IP.
Przypadek 1. Jeśli agent użytkownika należy do znanej wyszukiwarki, takiej jak Google, Bing , Yahoo (więcej informacji na temat agentów użytkownika można znaleźć w Google ). Następnie musisz zobaczyć http://www.iplists.com/ . Ta lista i spróbuj dopasować wzorce. A jeśli wygląda na fałszywego klienta użytkownika, poproś o wypełnienie CAPTCHA podczas następnej wizyty. (Musisz dowiedzieć się nieco więcej na temat adresów IP botów. Wiem, że jest to możliwe, a także spróbuj whois z adresu IP. Może to być pomocne).
Przypadek 2. Brak agenta użytkownika dla bota wyszukiwania: Poproś o wypełnienie CAPTCHA podczas następnej wizyty.
źródło
Późna odpowiedź - a także prawdopodobnie ta odpowiedź nie jest taka, którą chcesz usłyszeć ...
Sam napisałem już wiele (wiele dziesiątek) różnych specjalistycznych skrobaków do eksploracji danych. (tylko dlatego, że podoba mi się filozofia „otwartych danych”).
Oto już wiele porad w innych odpowiedziach - teraz odegram rolę adwokata diabła i rozszerzę i / lub poprawię ich skuteczność.
Pierwszy:
Próba użycia niektórych barier technicznych nie jest warta kłopotów, ponieważ:
Zwykły HMTL - najłatwiej jest przeanalizować zwykłe strony HTML z dobrze zdefiniowaną strukturą i klasami css. Np. Wystarczy sprawdzić element za pomocą Firebuga i użyć właściwych ścieżek X i / lub ścieżki CSS w moim skrobaczce.
Możesz dynamicznie generować strukturę HTML, a także dynamicznie generować nazwy klas CSS (i sam CSS) (np. Używając losowych nazw klas) - ale
Nie możesz zmienić struktury każdej odpowiedzi, ponieważ twoi zwykli użytkownicy będą cię nienawidzić. Spowoduje to również więcej problemów (konserwacji), a nie zgarniacza. Ścieżka XPath lub CSS jest określana automatycznie przez skrypt zgarniający na podstawie znanej zawartości.
Ajax - nieco trudniejszy na początku, ale wiele razy przyspiesza proces zgarniania :) - dlaczego?
Analizując żądania i odpowiedzi, właśnie skonfigurowałem własny serwer proxy (napisany w perlu) i mój Firefox go używa. Oczywiście, ponieważ jest to mój własny serwer proxy - jest całkowicie ukryty - serwer docelowy postrzega go jako zwykłą przeglądarkę. (Więc nie ma X-Forwarded-for i takich nagłówków). Na podstawie dzienników proxy można w większości przypadków określić „logikę” żądań ajax, np. Mogłem pominąć większość skrobania html i po prostu użyć dobrze ustrukturyzowanych odpowiedzi ajax (głównie w formacie JSON).
A więc ajax niewiele pomaga ...
Niektóre bardziej skomplikowane są strony, które używają dużo spakowanych funkcji javascript .
Możliwe jest użycie dwóch podstawowych metod:
Takie skrobanie jest powolne (skrobanie odbywa się jak w zwykłej przeglądarce), ale tak jest
User-Agent filtrowanie oparte nie pomaga w ogóle. Każdy poważny eksplorator danych ustawi w swoim skrobaczce jakiś poprawny.
Wymagaj logowania - nie pomaga. Najprostszym sposobem na pokonanie go (bez analizy i / lub skryptowania protokołu logowania) jest zalogowanie się na stronie jako zwykły użytkownik, używając Mozilli i po prostu uruchom skrobak oparty na Mozrepl ...
Pamiętaj, że wymagane logowanie pomaga anonimowym botom, ale nie pomaga komuś, kto chce zeskrobać twoje dane. Po prostu zarejestrował się na swojej stronie jako zwykły użytkownik.
Korzystanie z ramek również nie jest bardzo skuteczne. Jest to wykorzystywane przez wiele serwisów filmowych na żywo i nie jest bardzo trudne do pokonania. Ramki są po prostu kolejnymi stronami HTML / JavaScript, które są potrzebne do analizy ... Jeśli dane są warte kłopotów - eksplorator danych wykona wymaganą analizę.
Ograniczanie oparte na adresie IP w ogóle nie jest skuteczne - tutaj jest zbyt wiele publicznych serwerów proxy, a także tutaj jest TOR ... :) Nie spowalnia to skrobania (dla kogoś, kto naprawdę chce twoich danych).
Bardzo trudne jest usuwanie danych ukrytych w obrazach. (np. po prostu konwertując dane na obrazy po stronie serwera). Zastosowanie „tesseract” (OCR) pomaga wiele razy - ale szczerze mówiąc - dane muszą być warte kłopotów dla skrobaka. (co wiele razy nie jest warte).
Z drugiej strony użytkownicy będą cię za to nienawidzić. Ja, (nawet gdy nie skrobam), nienawidzę stron internetowych, które nie pozwalają na skopiowanie zawartości strony do schowka (ponieważ informacje znajdują się w obrazach lub (głupie) próbują połączyć się prawym przyciskiem myszy z niestandardowym zdarzeniem JavaScript.: )
Najtrudniejsze są strony, które używają apletów Java lub Flasha , a aplet sam korzysta z bezpiecznych żądań https . Ale zastanów się dwa razy - jak zadowoleni będą użytkownicy twojego iPhone'a ...;). Dlatego obecnie bardzo niewiele witryn z nich korzysta. Sam, blokując całą zawartość Flash w mojej przeglądarce (podczas zwykłych sesji przeglądania) - i nigdy nie korzystam z witryn zależnych od Flasha.
Twoje kamienie milowe mogą być ..., więc możesz wypróbować tę metodę - pamiętaj tylko - prawdopodobnie stracisz niektórych użytkowników. Pamiętaj również, że niektóre pliki SWF podlegają dekompilacji. ;)
Captcha (te dobre - jak reCaptcha) bardzo pomaga - ale użytkownicy będą cię nienawidzić ... - wyobraź sobie, jak użytkownicy będą cię kochać, gdy będą musieli rozwiązać captcha na wszystkich stronach, pokazując informacje o artystach muzycznych.
Prawdopodobnie nie musisz kontynuować - już jesteś na zdjęciu.
Co powinieneś zrobić:
Pamiętaj: ukrycie danych jest prawie niemożliwe, jeśli z drugiej strony chcesz je opublikować (w przyjazny sposób) zwykłym użytkownikom.
Więc,
Pomyśl dwa razy, zanim spróbujesz użyć barier technicznych.
Zamiast próbować zablokować eksploratorów danych, po prostu włóż więcej wysiłku w użyteczność swojej witryny. Twój użytkownik cię pokocha. Czas (i energia) zainwestowane w bariery techniczne zwykle nie są warte - lepiej poświęcić czas, aby stworzyć jeszcze lepszą stronę internetową ...
Ponadto złodzieje danych nie są jak zwykli złodzieje.
Jeśli kupisz niedrogi alarm domowy i dodasz ostrzeżenie „ten dom jest połączony z policją” - wielu złodziei nawet nie spróbuje się włamać. Ponieważ jeden zły ruch przez niego - a on idzie do więzienia ...
Więc inwestujesz tylko kilka dolarów, ale złodziej inwestuje i dużo ryzykuje.
Ale złodziej danych nie ma takiego ryzyka. wręcz przeciwnie - jeśli zrobisz jeden zły ruch (np. jeśli wprowadzisz BŁĄD z powodu barier technicznych), stracisz użytkowników. Jeśli bot zgarniający nie zadziała po raz pierwszy, nic się nie dzieje - eksplorator danych po prostu spróbuje zastosować inne podejście i / lub przeprowadzi debugowanie skryptu.
W takim przypadku musisz zainwestować znacznie więcej - a skrobak zainwestuje znacznie mniej.
Pomyśl tylko, gdzie chcesz zainwestować swój czas i energię ...
Ps: angielski nie jest moim ojczystym - więc wybacz mi mój zepsuty angielski ...
źródło
Z technicznego punktu widzenia: po prostu modeluj, co robi Google, gdy trafisz do nich zbyt dużą liczbą zapytań jednocześnie. To powinno położyć temu kres.
Z prawnego punktu widzenia: Wydaje się, że dane, które publikujesz, nie są zastrzeżone. Oznacza to, że publikujesz nazwy i statystyki oraz inne informacje, które nie mogą być chronione prawami autorskimi.
W takim przypadku skrobaki nie naruszają praw autorskich poprzez redystrybucję informacji o nazwisku wykonawcy itp. Mogą one jednak naruszać prawa autorskie podczas ładowania witryny do pamięci, ponieważ witryna zawiera elementy, które podlegają ochronie praw autorskich (np. Układ itp.).
Polecam przeczytać o Facebooku v. Power.com i zobaczyć argumenty, których Facebook użył do zatrzymania zgarniania ekranu. Istnieje wiele legalnych sposobów na powstrzymanie kogoś przed skrobaniem witryny. Mogą być dalekosiężni i pomysłowi. Czasami sądy kupują argumenty. Czasem nie.
Ale zakładając, że publikujesz informacje o domenie publicznej, które nie są chronione prawem autorskim, takie jak nazwy i podstawowe statystyki ... powinieneś po prostu pozwolić im odejść w imię wolności słowa i otwartych danych. Właśnie o to chodzi w sieci.
źródło
Rzeczy, które mogą działać przeciwko początkującym skrobakom:
Rzeczy, które pomogą ogólnie:
Rzeczy, które pomogą, ale sprawią, że Twoi użytkownicy cię nienawidzą:
źródło
Zrobiłem dużo skrobania stron internetowych i podsumowałem niektóre techniki, aby zatrzymać skrobaczki na moim blogu w oparciu o to, co mnie denerwuje.
Jest to kompromis między użytkownikami a zgarniaczami. Jeśli ograniczysz adresy IP, użyj CAPTCHA, wymaga logowania itp., Utrudniasz skrobakom. Ale może to również wypędzić prawdziwych użytkowników.
źródło
Twoja najlepsza opcja jest niestety dość ręczna: poszukaj wzorców ruchu, które Twoim zdaniem wskazują na skrobanie i zablokuj ich adresy IP.
Skoro mówisz o witrynie publicznej, to uczynienie witryny przyjazną dla wyszukiwarki również sprawi, że strona będzie przyjazna dla skrobania. Jeśli wyszukiwarka może zaindeksować i zeskrobać Twoją witrynę, może to zrobić również złośliwy skrobak. Spacer jest cienki.
źródło
Jasne, że to możliwe. Aby uzyskać 100% sukcesu, przełącz swoją witrynę w tryb offline.
W rzeczywistości możesz zrobić pewne rzeczy, które nieco utrudniają skrobanie. Google sprawdza przeglądarkę, aby upewnić się, że nie robota robiącego wyniki wyszukiwania (chociaż, podobnie jak większość innych rzeczy, można sfałszować).
Możesz między innymi potrzebować kilku sekund między pierwszym połączeniem z witryną a kolejnymi kliknięciami. Nie jestem pewien, jaki byłby idealny czas ani dokładnie, jak to zrobić, ale to kolejny pomysł.
Jestem pewien, że jest jeszcze kilka innych osób, które mają dużo większe doświadczenie, ale mam nadzieję, że te pomysły są przynajmniej nieco pomocne.
źródło
Jest kilka rzeczy, które możesz zrobić, aby zapobiec skrobaniu ekranu. Niektóre nie są bardzo skuteczne, podczas gdy inne (CAPTCHA) są, ale utrudniają użyteczność. Trzeba też pamiętać, że może to utrudniać legalne skrobaki witryn, takie jak indeksy wyszukiwarek.
Zakładam jednak, że jeśli nie chcesz, aby został zeskrobany, oznacza to, że nie chcesz, aby wyszukiwarki również go indeksowały.
Oto kilka rzeczy, które możesz wypróbować:
Gdybym musiał to zrobić, prawdopodobnie użyłbym kombinacji trzech ostatnich, ponieważ minimalizują one niedogodności dla legalnych użytkowników. Musisz jednak zaakceptować fakt, że nie będziesz w stanie zablokować wszystkich w ten sposób, a gdy ktoś wymyśli, jak go obejść, będzie mógł go zeskrobać na zawsze. Możesz wtedy po prostu spróbować zablokować ich adresy IP, gdy je odkryjesz.
źródło
Nie jest to odpowiedź, której prawdopodobnie chcesz, ale po co ukrywać to, co próbujesz upublicznić?
źródło
Metoda pierwsza (tylko małe witryny):
podawaj zaszyfrowane / zakodowane dane.
Przeszukuję sieć za pomocą Pythona (urllib, żądania, beautifulSoup itp.) I znalazłem wiele stron internetowych, które obsługują zaszyfrowane / zakodowane dane, których nie można odszyfrować w żadnym języku programowania, ponieważ metoda szyfrowania nie istnieje.
Osiągnąłem to na stronie PHP, szyfrując i minimalizując dane wyjściowe (OSTRZEŻENIE: w przypadku dużych witryn nie jest to dobry pomysł), odpowiedź zawsze była pomieszana.
Przykład minimalizacji wyników w PHP ( Jak zminimalizować wyjście HTML strony? ):
Metoda druga:
Jeśli nie możesz ich powstrzymać, przekręć je w odpowiedzi na fałszywe / bezużyteczne dane.
Metoda trzecia:
zablokuj typowe agenty użytkownika zgarniające, zobaczysz to na dużych / dużych stronach internetowych, ponieważ nie jest możliwe zeskrobanie ich za pomocą „python3.4” jako User-Agent.
Metoda czwarta:
Upewnij się, że wszystkie nagłówki użytkownika są poprawne, czasami dostarczam tak wiele nagłówków, jak to możliwe, aby mój skrobak wyglądał jak autentyczny użytkownik, niektóre z nich nawet nie są prawdziwe lub prawidłowe jak en-FU :).
Oto lista niektórych nagłówków, które zazwyczaj udostępniam.
źródło
Zamiast umieszczać boty na czarnej liście, może powinieneś dodać je do białej listy. Jeśli nie chcesz zabijać wyników wyszukiwania dla kilku najlepszych wyszukiwarek, możesz dodać do białej listy ich ciągi użytkownika i klienta, które są ogólnie dobrze znane. Mniej etyczne boty mają tendencję do tworzenia ciągów użytkownika-agenta popularnych przeglądarek internetowych. Kilka najlepszych wyszukiwarek powinno zwiększać 95% ruchu.
Identyfikacja samych botów powinna być dość prosta, z wykorzystaniem technik sugerowanych przez inne plakaty.
źródło
Szybkim podejściem do tego byłoby ustawienie pułapki na miny / boty.
Stwórz stronę, która jeśli zostanie otwarta określoną liczbę razy, a nawet w ogóle, będzie zbierać pewne informacje, takie jak adres IP i tak dalej (możesz również wziąć pod uwagę nieprawidłowości lub wzorce, ale ta strona nie powinna wcale być otwarta).
Utwórz link do tego na swojej stronie, która jest ukryta za pomocą CSS display: none; lub w lewo: -9999px; pozycja: absolutna; spróbuj umieścić go w miejscach, które są mniej prawdopodobne, że zostaną zignorowane, np. tam, gdzie znajduje się twoja treść, a nie w stopce, ponieważ czasami boty mogą zapomnieć o niektórych częściach strony.
W swoim pliku robots.txt ustaw całą masę niedozwolonych reguł dla stron, na których nie chcesz, aby przyjazne boty (LOL, jakby miały szczęśliwe twarze!) Gromadziły informacje i ustawiały tę stronę jako jedną z nich.
Teraz, jeśli przyjdzie przyjazny bot, powinien zignorować tę stronę. Racja, ale to wciąż nie wystarczy. Zrób jeszcze kilka z tych stron lub przekieruj stronę, aby zaakceptować różne nazwy. a następnie umieść więcej reguł niedozwolonych na tych stronach pułapek w pliku robots.txt obok stron, które chcesz zignorować.
Zbieraj adresy IP tych botów lub kogokolwiek, kto wejdzie na te strony, nie zbanuj ich, ale włącz funkcję wyświetlania makaronowego tekstu w twoich treściach, takich jak losowe liczby, informacje o prawach autorskich, określone ciągi tekstowe, wyświetlanie przerażających zdjęć, w zasadzie wszystko, co może utrudniać dobra treść. Możesz także ustawić linki prowadzące do strony, której ładowanie zajmie wieczność, tj. w php możesz użyć funkcji sleep (). Spowoduje to walkę z przeszukiwaczem z powrotem, jeśli ma on pewne wykrycie, aby ominąć strony, których ładowanie trwa zbyt długo, ponieważ niektóre dobrze napisane boty są ustawione na przetwarzanie X linków jednocześnie.
Jeśli masz określone ciągi tekstowe / zdania, przejdź do swojej ulubionej wyszukiwarki i poszukaj ich, może to wskazywać, gdzie kończy się twoja treść.
W każdym razie, jeśli myślisz taktycznie i twórczo, może to być dobry punkt wyjścia. Najlepiej jest dowiedzieć się, jak działa bot.
Zastanowiłbym się również nad oszukaństwem niektórych identyfikatorów lub sposobem wyświetlania atrybutów w elemencie strony:
która zmienia swoją formę za każdym razem, ponieważ niektóre boty mogą być ustawione na szukanie określonych wzorców na twoich stronach lub elementach docelowych.
źródło
Nie można zatrzymać normalnego zgarniania ekranu. Na lepsze lub gorsze, to natura sieci.
Możesz to zrobić, aby nikt nie miał dostępu do niektórych rzeczy (w tym plików muzycznych), chyba że są zalogowani jako zarejestrowani użytkownicy. W Apache nie jest to zbyt trudne . Zakładam, że nie byłoby to zbyt trudne w IIS.
źródło
Jednym ze sposobów byłoby podanie zawartości jako atrybutów XML, ciągów zakodowanych w adresie URL, wstępnie sformatowanego tekstu za pomocą JSON zakodowanego w HTML lub identyfikatorów URI danych, a następnie przekształcenie go w HTML na kliencie. Oto kilka witryn, które to robią:
Skechers : XML
Chrome Web Store : JSON
Bing News : adres URL danych
Protopage : Ciągi zakodowane w adresie URL
TiddlyWiki : Encje HTML + wstępnie sformatowany JSON
Amazon : Leniwy ładowanie
XMLCalabash : Przestrzeń nazw XML + Niestandardowy typ MIME + Niestandardowe rozszerzenie pliku
Jeśli zobaczysz źródło w którymkolwiek z powyższych, zobaczysz, że skrobanie zwróci po prostu metadane i nawigację.
źródło
Większość już powiedziano, ale czy rozważałeś ochronę CloudFlare? To znaczy:
Prawdopodobnie robią to również inne firmy, CloudFlare jest jedyną, jaką znam.
Jestem pewien, że skomplikowałoby to ich pracę. Raz też automatycznie zablokowałem IP na 4 miesiące, kiedy próbowałem zeskrobać dane witryny chronionej przez CloudFlare z powodu limitu prędkości (użyłem prostej pętli żądań AJAX).
źródło
Zgadzam się z większością powyższych postów i chciałbym dodać, że im bardziej Twoja witryna jest przyjazna dla wyszukiwarek, tym łatwiej będzie ją zeskrobać. Możesz spróbować zrobić kilka rzeczy, które bardzo utrudniają skrobaki, ale może to również wpłynąć na twoje możliwości wyszukiwania ... Zależy to oczywiście od tego, jak dobrze Twoja strona ma się zajmować pozycję w wyszukiwarkach.
źródło
Umieszczenie treści za captcha oznaczałoby, że robotom trudno byłoby uzyskać dostęp do treści. Jednak ludzie byliby niewygodni, więc może to być niepożądane.
źródło
Jeśli chcesz zobaczyć świetny przykład, sprawdź http://www.bkstr.com/ . Używają algorytmu aj / s do ustawienia pliku cookie, a następnie ponownie ładują stronę, aby mógł użyć pliku cookie do sprawdzenia, czy żądanie jest uruchamiane w przeglądarce. Aplikacja komputerowa stworzona do zeskrobywania może na pewno sobie z tym poradzić, ale zatrzyma większość skrobania typu CURL.
źródło
Skrobaki do ekranów działają poprzez przetwarzanie HTML. A jeśli są zdeterminowani, aby uzyskać twoje dane, niewiele możesz zrobić technicznie, ponieważ ludzka gałka oczna przetwarza cokolwiek. Z prawnego punktu widzenia już wspomniano, że możesz skorzystać z pewnych możliwości i taka byłaby moja rekomendacja.
Możesz jednak ukryć krytyczną część swoich danych, używając logiki prezentacji nie opartej na HTML
Pamiętaj, że prawdopodobnie wpłynie to na twoje rankingi wyszukiwania.
źródło
Wygeneruj HTML, CSS i JavaScript. Łatwiej jest pisać generatory niż parsery, więc każdą obsługiwaną stronę można wygenerować inaczej. Wówczas nie można już używać pamięci podręcznej ani zawartości statycznej.
źródło