Jak zapobiec skrobaniu witryny? [Zamknięte]

301

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?

piksel
źródło
9
Czy zastanawiałeś się nad próbą wykrycia ich skrobaka za pomocą adresu IP lub podobnego (sprawdź swoje dzienniki) i po prostu sfałszowanie danych dla nich? W ten sposób owszem „zeskrobaliby” Twoją witrynę, ale ich „dane” byłyby bezużyteczne.
Lasse V. Karlsen
30
Lolcats do góry nogami i ktoś odwrócony / zakodowany tekst?
Wayne Werner
2
podobne pytanie stackoverflow.com/questions/2705394/…
user279521
7
Dyskusja na temat meta
TJ Crowder
2
@JonasCz to był ironiczny żart. Smutne jest to, że podobna propozycja zawarta jest w twojej odpowiedzi, choć skrytykowana.
Tomáš Zato - Przywróć Monikę

Odpowiedzi:

325

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 [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:

  • 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 articleIds 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ą divz 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-contentdiv 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-contentcoś się div.a4c36dda13eaf0zmieni 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 divwnętrze, divktóre następuje po h1tekś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 divs lub spans. 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.phpzrobić 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 styleatrybut 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:

JonasCz - Przywróć Monikę
źródło
11
To mnie tu sprowadziło. Całkiem imponująca odpowiedź. Poza tym całkiem niesamowita historia zmian. Dzięki za post. Dostajesz głos pozytywny. Nie tylko ze względu na wysiłek włożony w to, ale także dlatego, że jest to dla mnie przydatne.
DaveTheMinion
1
Świetna odpowiedź! Oto kilka myśli. A real browser will (almost always) request and download assets such as images and CSSdotyczy 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-proofnesszrównoważ także czas / złożoność programowania w porównaniu do korzyści finansowych.
Eric J.
5
@JonH, jeśli są zainteresowani, przeczytają to. Ponadto podzieliłem go na akapity z nagłówkami i podtytułami, aby ludzie mogli je zeskanować i przeczytać wybrane części. W rzeczywistości istnieje wiele podobnie długich odpowiedzi na SO, a ludzie je czytają.
JonasCz - Przywróć Monikę
2
@JoshCrozier - myślę, że strony takie jak ta nie grają dobrze z taką ilością informacji. Nie twierdzę, że informacje są złe.
JonH
2
PS Mój steganograficzny pomysł pobierania odcisków palców treści mógłby zostać wykorzystany w sądzie. Wyobraź sobie szok, gdy udowodnisz, że posiadacz twoich danych dostał je od ciebie, dzięki unikalnym cechom bezpośrednio w danych ...
ErikE
241

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:

  1. Utwórz stronę /jail.html.
  2. Nie zezwalaj na dostęp do strony w robots.txt(aby pełne szacunku pająki nigdy nie odwiedzą).
  3. Umieść link na jednej ze swoich stron, ukrywając go za pomocą CSS ( display: none).
  4. Zapisz adresy IP odwiedzających /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.htmlcałą 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/3aads8itp). 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.

Daniel Trebbien
źródło
48
Wcześniej widziałem tę technikę zwaną „plaster miodu”. Jest to technika stosowana również w filtrowaniu spamu, w której umieszczasz adres e-mail na stronie, ale go ukrywasz lub wyraźnie zaznaczasz, że nie jest możliwe wysyłanie legalnej poczty. Następnie zbierz adres IP dowolnego serwera pocztowego, który dostarcza pocztę na ten adres.
thomasrutter
12
Zakłada się, że indeksują linki. Większość skrobaków będzie próbować poddać się jakiejś formie i zeskrobać zwrócone dane.
Byron Whitlock,
9
Widziałem honeypoty oparte na Perlu do wiadomości e-mail, które zawierają linki do innych „stron” generowanych przez skrypt Perla. Uzasadnione boty, które czytają plik robots.txt, nie oglądają go i są ukryte przed użytkownikami za pomocą CSS, ale skrobaczki (lub moduły do ​​zbierania e-maili) szybko zostają złapane w nieskończenie głębokie drzewo stron, wszystkie ze złymi danymi na nich. Umieść link do skryptu na początku każdej ze stron.
Stephen P
18
Kolejną niesamowitą rzeczą do rzucenia w plastry miodu są teergrubing (lub plandeki). To stara technika, którą uwielbiam - kiedy rozpoznajesz złego faceta, doprowadzasz jego proces spamowania / skrobania do pełzania poprzez celowe utrzymywanie jego połączeń tak długo, jak to możliwe fizycznie, bez przekroczenia limitu czasu. Oczywiście może to zaalarmować ich, że też do nich podchodzisz, ale do cholery, to jest fajne. en.wikipedia.org/wiki/Teergrubing
womp
11
Jedynym problemem związanym z tym podejściem jest umieszczenie [img] yoursite / jail.html [/ img] na popularnym forum. Otrzymasz mnóstwo IP zalogowanych do twojego systemu i trudno będzie odfiltrować, który z nich jest zły. Jeśli chcesz temu zapobiec, musisz dodać token powiązany z adresem IP w adresie URL. Coś jak jail.php? T = hoeyvm, aw bazie danych masz skojarzenie hoeyvm i adresu IP, który poprosił o stronę.
HoLyVieR
48

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ć.

Unicron
źródło
9
działa tylko w krajach o solidnych ramach prawnych.
TomL
3
Prawnicy żyją w konflikcie - i czerpią z niego korzyści. Rzadko, jeśli kiedykolwiek, prawnik odradza ci nie chodzenie do sądu. Każdy, kto powie ci, że wygrywanie i przegrywanie nie ma nic wspólnego z pięknymi pojęciami „sprawiedliwości”, ale z argumentami, nastrojami i uprzedzeniami w ciągu dnia. Pamiętaj, że jeśli coś pójdzie nie tak, możesz ponosić odpowiedzialność nie tylko za koszty swojego prawnika, ale także innych stron, a jeśli zdecydują się na wniesienie powództwa - cóż. Możesz łatwo stracić dom i inne aktywa w swoim życiu. Nie hazard, sugerowałbym. Radzę unikać za wszelką cenę sądów.
Frankie
3
Zgadzam się z @TomL. Jeśli są na Zachodzie, jest to całkiem prawdopodobne. Ale jeśli są w Indiach / Chinach / Rosji / Ukrainie / czymkolwiek - to poważnie, minimalnie lub bez szans. Mogę powiedzieć o rosyjskich sądach: nawet nie zawracają sobie głowy pracą z twoimi roszczeniami.
Highstaker
35

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.

ryeguy
źródło
14
Stworzenie systemu, który ogranicza liczbę stron, które IP może wyświetlić na minutę, to dobry hack, ponieważ skrobaczki do ekranu będą przenikać przez witrynę znacznie szybciej niż jakakolwiek normalna osoba.
TravisO,
Zgoda. Adresy IP kosztują pieniądze i są ograniczone przez większość firm hostingowych.
Tal Weiss,
re: „Rzeczy takie jak zmiana identyfikatora lub nazwy klasy elementów strony przy każdym ładowaniu itp.” Nie jest tak źle, jeśli utworzysz nazwę klasy przez PHP, a następnie użyjesz <div class = "<? Php echo $ myPHPGeneratedClassName;?>">, Możesz nawet użyć losowych ciągów znaków, aby uczynić ją całkowicie unikalną. Wszystko, co powstrzymuje ich przed znalezieniem wzorców, znacznie utrudnia analizowanie DOM.
niggles
Nie jest trudno znaleźć adres IP. Jest mnóstwo serwerów proxy, komputerów znajomych, komputerów roboczych, komputerów szkolnych, komputerów bibliotecznych ...
Incognito,
@ user257493: To prawda, ale mówimy o kimś, kto tutaj zgarnia dane. Są szanse, że nie zamierzamy iść do tego wysiłku tylko do zbiorów danych. A jeśli to zrobią, ostatecznie wyczerpiesz ich podaż adresów IP.
ryeguy
31

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. ;)

Williham Totland
źródło
3
To wydaje się bardzo rozsądne. Skrobanie ekranu jest cholernie trudne, a jeśli zapewnisz interfejs API, możesz nałożyć na niego pewne ograniczenia, dodawać powiadomienia („Treść z ----.com”) i zasadniczo kontrolować, jakie dane są przekazywane.
alecwh
6
@alecwh: i opłaty za dostęp!
André Caron,
3
Przyznałem ci nagrodę, częściowo dlatego, że Internet byłby o wiele lepszy, gdyby to zrobiła każda strona internetowa. Miejmy nadzieję, że stanie się bardziej powszechny.
JonasCz - Przywróć Monikę
1
Gdy tylko zarejestrujesz się w usłudze, wrócą do normalnej strony
mplungjan
Jestem jedną z takich osób po przeciwnej stronie tej rozmowy. Buduję modele programów na Broadwayu i muszę zgarniać wszystkie moje dane, a nie mieć do nich łatwy dostęp.
Yaakov Bressler
22

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.

Jaszczurka
źródło
12

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.

Arshdeep
źródło
+1 Korzystanie z iplists.com to doskonały pomysł
Daniel Trebbien
10

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:

  • jeśli ktoś naprawdę chce twoich danych
  • nie możesz skutecznie (technicznie) ukryć swoich danych
  • czy dane powinny być publicznie dostępne dla „zwykłych użytkowników”

Próba użycia niektórych barier technicznych nie jest warta kłopotów, ponieważ:

  • zwykłym użytkownikom, pogarszając ich wygodę
  • zwykłym i mile widzianym botom (wyszukiwarki)
  • itp...

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

  • chcesz w spójny sposób prezentować informacje zwykłym użytkownikom
  • np. ponownie - wystarczy jeszcze raz przeanalizować strukturę strony, aby skonfigurować skrobak.
  • i można to zrobić automatycznie, analizując niektóre „znane treści”
    • gdy ktoś już wie (przez wcześniejsze złomowanie), np .:
    • co zawiera informacje o „phil collins”
    • wystarczy wyświetlić stronę „phil collins” i (automatycznie) przeanalizować strukturę strony „dzisiaj” :)

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:

  • rozpakuj i zrozum JS i stwórz skrobak zgodny z logiką Javascript (trudny sposób)
  • lub (najlepiej używając samodzielnie) - po prostu używam Mozilli z Mozreplem do zeskrobywania. Np. Prawdziwe skrobanie odbywa się we w pełni wyposażonej przeglądarce obsługującej javascript, która jest zaprogramowana do klikania odpowiednich elementów i po prostu chwytania „zdekodowanych” odpowiedzi bezpośrednio z okna przeglądarki.

Takie skrobanie jest powolne (skrobanie odbywa się jak w zwykłej przeglądarce), ale tak jest

  • bardzo łatwy w konfiguracji i obsłudze
  • i prawie niemożliwe jest temu przeciwdziałać :)
  • „powolność” jest jednak niezbędna, aby przeciwdziałać „blokowaniu szybkich żądań opartych na IP”

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,

  • uczynić twoje dane łatwo dostępnymi - przez niektóre API
    • pozwala to na łatwy dostęp do danych
    • np. odciąży twój serwer przed skrobaniem - dobre dla ciebie
  • ustaw odpowiednie prawa użytkowania (np. na przykład musisz podać źródło)
  • pamiętaj, że wiele danych nie jest chronionych prawem autorskim - i trudno je chronić
  • dodaj fałszywe dane (jak już to zrobiłeś) i użyj legalnych narzędzi
    • jak już powiedzieli inni, wyślij „list zaprzestania działalności”
    • inne czynności prawne (pozwać i tym podobne) są prawdopodobnie zbyt kosztowne i trudne do wygrania (szczególnie w przypadku witryn spoza USA)

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 ...

jm666
źródło
@Parapluie Naprawdę powinieneś przeczytać o darmowej treści i / lub modelu Open Source - o datach, historii, celach i etyce. A szczególnie o Otwartych Danych - dla których stworzyłem większość moich skrobaków ...
jm666,
Rozumiem tę koncepcję, ale dziękuję za twoje erudycyjne rekomendacje. Mogliśmy o tym ciekawie porozmawiać; ale wygląda na to, że mój oryginalny komentarz został usunięty przez firmę zewnętrzną. Czy w końcu jesteśmy naprawdę wolni?
Parapluie
8

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.

dengeltrees
źródło
1
Mimo że możesz nie być w stanie uzyskać informacji o prawach autorskich, zdecydowanie możesz umieścić klauzulę dotyczącą złomowania w warunkach użytkowania. Następnie wyślij list o zaprzestaniu działalności i zaniechaniu naruszenia warunków użytkowania.
André Caron,
1
Wolność słowa i otwarte dane są rzeczywiście duchem Internetu!
Ciara
Tak, wolność słowa i tak dalej. Ale skrobaki mogą marnować znaczną część budżetu PO lub pasma, a także kopiować dane, których nie można skopiować.
jpaugh
8

Rzeczy, które mogą działać przeciwko początkującym skrobakom:

  • Blokowanie adresów IP
  • używaj dużo ajax
  • sprawdź nagłówek żądania osoby odsyłającej
  • wymaga zalogowania

Rzeczy, które pomogą ogólnie:

  • zmieniaj układ co tydzień
  • robots.txt

Rzeczy, które pomogą, ale sprawią, że Twoi użytkownicy cię nienawidzą:

  • captcha
pguardiario
źródło
8

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.

hoju
źródło
8

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.

STW
źródło
4
Blokowanie adresów IP spowolni działanie zgarniacza, ale jest to również dużo pracy dla twojego serwera. Powiedzmy, że zdrapuję cię tysiącem serwerów proxy, wciąż mam dane, których chcę, a teraz twoja zapora sieciowa to bałagan.
pguardiario
1
Kiedy to zrobisz, staną na tobie poziomo. 100000 adresów dzisiaj nic dla nich nie kosztuje, ale spowalnia twoją stronę, jeśli spróbujesz zablokować je wszystkie - i będą obracać adresy IP, aby nie odwiedzać więcej niż raz lub dwa razy
mplungjan
6

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.

Wayne Werner
źródło
6

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ć:

  • Pokaż tekst na obrazie. Jest to dość niezawodne i jest mniej uciążliwe dla użytkownika niż CAPTCHA, ale oznacza, że ​​nie będą w stanie wycinać i wklejać, i nie będzie ładnie skalować ani być dostępne.
  • Użyj CAPTCHA i zażądaj jej wypełnienia przed zwróceniem strony. Jest to niezawodna metoda, ale także największy ból, jaki należy nałożyć na użytkownika.
  • Wymagaj od użytkownika, aby założył konto przed przeglądaniem stron i potwierdź swój adres e-mail. Będzie to całkiem skuteczne, ale nie całkowicie - skrobaczka ekranu może założyć konto i sprytnie zaprogramować swój skrypt, aby się do nich zalogować.
  • Jeśli ciąg klienta-klienta klienta jest pusty, zablokuj dostęp. Skrypt do skrobania witryny jest często leniwie programowany i nie ustawia ciągu agenta użytkownika, podczas gdy wszystkie przeglądarki internetowe tak.
  • Możesz ustawić czarną listę znanych ciągów skradzionych ekranów użytkownika i agenta podczas ich odkrywania. Ponownie pomoże to tylko leniwie zakodowanym; programista, który wie, co robi, może ustawić ciąg agenta użytkownika w celu podszywania się pod przeglądarkę internetową.
  • Często zmieniaj ścieżkę URL. Kiedy to zmienisz, upewnij się, że stary nadal działa, ale tylko tak długo, jak długo jeden użytkownik może mieć otwartą przeglądarkę. Trudno jest przewidzieć, jaka będzie nowa ścieżka adresu URL. Utrudni to skryptom przechwycenie go, jeśli jego adres URL jest zakodowany na stałe. Najlepiej byłoby to zrobić za pomocą jakiegoś skryptu.

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.

thomasrutter
źródło
6
  1. Nie, nie można zatrzymać (w żaden sposób)
  2. Przyjmij to. Dlaczego nie opublikować jako RDFa i stać się przyjaznym dla wyszukiwarek i zachęcać do ponownego wykorzystywania danych? Ludzie będą Ci wdzięczni i udzielą kredytu w odpowiednim czasie (patrz Musicbrainz jako przykład).

Nie jest to odpowiedź, której prawdopodobnie chcesz, ale po co ukrywać to, co próbujesz upublicznić?

Natan
źródło
5

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? ):

<?php
  function sanitize_output($buffer) {
    $search = array(
      '/\>[^\S ]+/s', // strip whitespaces after tags, except space
      '/[^\S ]+\</s', // strip whitespaces before tags, except space
      '/(\s)+/s'      // shorten multiple whitespace sequences
    );
    $replace = array('>', '<', '\\1');
    $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
  }
  ob_start("sanitize_output");
?>

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.

headers = {
  "Requested-URI": "/example",
  "Request-Method": "GET",
  "Remote-IP-Address": "656.787.909.121",
  "Remote-IP-Port": "69696",
  "Protocol-version": "HTTP/1.1",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
  "Accept-Encoding": "gzip,deflate",
  "Accept-Language": "en-FU,en;q=0.8",
  "Cache-Control": "max-age=0",
  "Connection": "keep-alive",
  "Dnt": "1",  
  "Host": "http://example.com",
  "Referer": "http://example.com",
  "Upgrade-Insecure-Requests": "1",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}
Społeczność
źródło
2

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.

Chris
źródło
2

Szybkim podejściem do tego byłoby ustawienie pułapki na miny / boty.

  1. 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).

  2. 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.

  3. 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.

  4. 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ć.

  5. 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.

  6. 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:

<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle"> 

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.

<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass"> 

id="p-12802" > id="p-00392"
Steve Chan
źródło
1
Nie chcesz ich po prostu zbanować, ale chcesz je całkowicie pieprzyć ... Uwielbiam to!
Zoidberg,
Banowanie podstępem jest dokładnie tym, o czym myślałem (aka banowania cienia, banowania piekła).
ErikE
1

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.

Dina
źródło
1

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

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • Chrome Web Store : JSON

    <script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
  • Bing News : adres URL danych

    <script type="text/javascript">
      //<![CDATA[
      (function()
        {
        var x;x=_ge('emb7');
        if(x)
          {
          x.src='data:image/jpeg;base64,/*...*/';
          } 
        }() )
  • Protopage : Ciągi zakodowane w adresie URL

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : Encje HTML + wstępnie sformatowany JSON

       <pre>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;Welcome to TiddlyWiki,
          }
        }
       }
       </pre>
  • Amazon : Leniwy ładowanie

    amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
    amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
  • XMLCalabash : Przestrzeń nazw XML + Niestandardowy typ MIME + Niestandardowe rozszerzenie pliku

       <p:declare-step type="pxp:zip">
            <p:input port="source" sequence="true" primary="true"/>
            <p:input port="manifest"/>
            <p:output port="result"/>
            <p:option name="href" required="true" cx:type="xsd:anyURI"/>
            <p:option name="compression-method" cx:type="stored|deflated"/>
            <p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
            <p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
       </p:declare-step>

Jeśli zobaczysz źródło w którymkolwiek z powyższych, zobaczysz, że skrobanie zwróci po prostu metadane i nawigację.

Paul Sweatte
źródło
Więc ... takie podejście sprawia, że ​​skrobanie jest jeszcze łatwiejsze, ponieważ zawartość ma teraz jednolity format. W rzeczywistości nie byłby już nazywany skrobaniem : nazywa się go parsowaniem i jest naprawdę bardzo łatwy do zrobienia programowo.
jpaugh
1

Większość już powiedziano, ale czy rozważałeś ochronę CloudFlare? To znaczy:

opis obrazu

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).

Tomáš Zato - Przywróć Monikę
źródło
1

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.

sjobe
źródło
0

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.

SorcyCat
źródło
0

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.

blacktie24
źródło
0

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

  • Wygeneruj plik Flash dla każdego wykonawcy / albumu itp.
  • Wygeneruj obraz dla każdego artysty. Może wystarczyłby tylko obraz z nazwą wykonawcy itp. Zrób to, renderując tekst na plik JPEG / PNG na serwerze i łącząc się z tym obrazem.

Pamiętaj, że prawdopodobnie wpłynie to na twoje rankingi wyszukiwania.

James Westgate
źródło
0

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.

Stephan Eggermont
źródło