¿Cómo evito el raspado del sitio? [cerrado]


301

Tengo un sitio web de música bastante grande con una gran base de datos de artistas. He notado que otros sitios de música raspan los datos de nuestro sitio (ingreso nombres de artistas ficticios aquí y allá y luego los busco en Google).

¿Cómo puedo evitar el raspado de la pantalla? ¿Es posible?


99
¿Ha considerado intentar detectar su raspador a través de IP o similar (verifique sus registros) y simplemente falsifique sus datos por completo? De esa manera, sí, "rasparían" su sitio, pero sus "datos" serían inútiles.
Lasse V. Karlsen

30
¿Lolcats al revés y texto revuelto / revuelto?
Wayne Werner



2
@JonasCz fue una broma irónica. Lo triste es que se incluye una propuesta similar en su respuesta, aunque criticada.
Tomáš Zato - Restablece a Mónica

Respuestas:


325

Nota: Como la versión completa de esta respuesta excede el límite de longitud de Stack Overflow, deberá dirigirse a GitHub para leer la versión extendida, con más consejos y detalles.


Para dificultar el raspado (también conocido como Webscraping , Screenscraping , minería de datos web , recolección web o extracción de datos web ), es útil saber cómo funcionan estos raspadores y, por extensión, qué les impide funcionar bien.

Hay varios tipos de raspadores, y cada uno funciona de manera diferente:

  • Las arañas, como el robot de Google o las copiadoras de sitios web como HTtrack , que siguen recursivamente enlaces a otras páginas para obtener datos. A veces se usan para el raspado dirigido para obtener datos específicos, a menudo en combinación con un analizador HTML para extraer los datos deseados de cada página.

  • Scripts de shell: a veces, se utilizan herramientas comunes de Unix para el raspado: Wget o Curl para descargar páginas y Grep (Regex) para extraer los datos.

  • Analizadores HTML, como los basados ​​en Jsoup, Scrapy y otros. Similar a los basados ​​en expresiones regulares de shell-script, estos funcionan extrayendo datos de páginas basadas en patrones en HTML, generalmente ignorando todo lo demás.

    Por ejemplo: si su sitio web tiene una función de búsqueda, dicho rascador puede enviar una solicitud de búsqueda y luego obtener todos los enlaces de resultados y sus títulos del HTML de la página de resultados, para obtener específicamente solo enlaces de resultados de búsqueda y sus títulos . Estos son los mas comunes.

  • Capturas de pantalla, basadas en eg. Selenium o PhantomJS , que abren su sitio web en un navegador real, ejecutan JavaScript, AJAX, etc., y luego obtienen el texto deseado de la página web, generalmente mediante:

    • Obtener el HTML del navegador después de cargar su página y ejecutar JavaScript, y luego usar un analizador HTML para extraer los datos deseados. Estos son los más comunes, y muchos de los métodos para romper los analizadores / raspadores HTML también funcionan aquí.

    • Tomar una captura de pantalla de las páginas renderizadas y luego usar OCR para extraer el texto deseado de la captura de pantalla. Estos son raros, y solo los scrapers dedicados que realmente quieren sus datos configurarán esto.

  • Servicios de webcraping como ScrapingHub o Kimono . De hecho, hay personas cuyo trabajo es descubrir cómo raspar su sitio y extraer el contenido para que otros lo usen.

    Como era de esperar, los servicios de raspado profesionales son los más difíciles de disuadir, pero si hace que sea difícil y lento descubrir cómo raspar su sitio, estos (y las personas que les pagan para hacerlo) no se molestarán en raspar su sitio web.

  • Incrustar su sitio web en las páginas de otro sitio con marcos e incrustar su sitio en aplicaciones móviles.

    Si bien no es técnicamente scraping, las aplicaciones móviles (Android e iOS) pueden incrustar sitios web e inyectar CSS y JavaScript personalizados, lo que cambia completamente la apariencia de sus páginas.

  • Copiar y pegar humano: la gente copiará y pegará su contenido para usarlo en otro lugar.

Hay una gran superposición entre estos diferentes tipos de raspadores, y muchos raspadores se comportarán de manera similar, incluso si usan diferentes tecnologías y métodos.

Estos consejos son principalmente mis propias ideas, varias dificultades que he encontrado al escribir raspadores, así como fragmentos de información e ideas de todo el interwebs.

Cómo dejar de raspar

No puedes evitarlo por completo , ya que hagas lo que hagas, determinados raspadores aún pueden descubrir cómo raspar. Sin embargo, puede detener muchos raspados haciendo algunas cosas:

Controle sus registros y patrones de tráfico; Limite el acceso si ve actividad inusual:

Revise sus registros regularmente, y en caso de actividad inusual indicativa de acceso automatizado (raspadores), como muchas acciones similares desde la misma dirección IP, puede bloquear o limitar el acceso.

Específicamente, algunas ideas:

  • Limitación de velocidad:

    Solo permita que los usuarios (y los raspadores) realicen un número limitado de acciones en un tiempo determinado; por ejemplo, solo permita algunas búsquedas por segundo desde cualquier dirección IP o usuario específico. Esto ralentizará los rascadores y los hará ineficaces. También puede mostrar un captcha si las acciones se completan demasiado rápido o más rápido de lo que lo haría un usuario real.

  • Detectar actividad inusual:

    Si ve actividad inusual, como muchas solicitudes similares de una dirección IP específica, alguien que mira un número excesivo de páginas o realiza una cantidad inusual de búsquedas, puede evitar el acceso o mostrar un captcha para solicitudes posteriores.

  • No solo controle y limite la velocidad por dirección IP, use también otros indicadores:

    Si bloquea o limita la velocidad, no lo haga solo por dirección IP; puede usar otros indicadores y métodos para identificar usuarios o raspadores específicos. Algunos indicadores que pueden ayudarlo a identificar usuarios / raspadores específicos incluyen:

    • Qué tan rápido los usuarios completan formularios y dónde hacen clic en un botón;

    • Puede recopilar mucha información con JavaScript, como tamaño / resolución de pantalla, zona horaria, fuentes instaladas, etc. puede usar esto para identificar usuarios.

    • Encabezados HTTP y su orden, especialmente User-Agent.

    Como ejemplo, si recibe muchas solicitudes de una sola dirección IP, todas usan el mismo Agente de usuario, tamaño de pantalla (determinado con JavaScript) y el usuario (en este caso, el raspador) siempre hace clic en el botón de la misma manera y en intervalos regulares, probablemente sea un raspador de pantalla; y puede bloquear temporalmente solicitudes similares (por ejemplo, bloquear todas las solicitudes con ese agente de usuario y el tamaño de pantalla que proviene de esa dirección IP en particular), y de esta manera no incomodará a los usuarios reales en esa dirección IP, por ejemplo. en caso de una conexión a internet compartida.

    También puede llevar esto más lejos, ya que puede identificar solicitudes similares, incluso si provienen de diferentes direcciones IP, indicativas de un raspado distribuido (un raspador que utiliza una red de bots o una red de servidores proxy). Si recibe muchas solicitudes idénticas, pero provienen de diferentes direcciones IP, puede bloquear. Una vez más, tenga en cuenta que no bloquea accidentalmente usuarios reales.

    Esto puede ser efectivo contra screencrapers que ejecutan JavaScript, ya que puede obtener mucha información de ellos.

    Preguntas relacionadas sobre Security Stack Exchange:

  • En lugar de bloquear temporalmente el acceso, use un Captcha:

    La forma simple de implementar la limitación de velocidad sería bloquear temporalmente el acceso durante un cierto período de tiempo, sin embargo, usar un Captcha puede ser mejor, consulte la sección sobre Captchas más abajo.

Requiere registro e inicio de sesión

Requerir creación de cuenta para ver su contenido, si esto es factible para su sitio. Este es un buen elemento disuasorio para los rascadores, pero también es un buen elemento disuasorio para los usuarios reales.

  • Si necesita crear una cuenta e iniciar sesión, puede realizar un seguimiento preciso de las acciones del usuario y del raspador. De esta manera, puede detectar fácilmente cuándo se está utilizando una cuenta específica para el raspado y prohibirla. Cosas como limitar la velocidad o detectar abuso (como una gran cantidad de búsquedas en poco tiempo) se vuelven más fáciles, ya que puede identificar raspadores específicos en lugar de solo direcciones IP.

Para evitar que los scripts creen muchas cuentas, debe:

  • Solicite una dirección de correo electrónico para registrarse y verifique esa dirección enviando un enlace que debe abrirse para activar la cuenta. Permita solo una cuenta por dirección de correo electrónico.

  • Requiere que se resuelva un captcha durante el registro / creación de la cuenta.

Requerir la creación de una cuenta para ver el contenido alejará a los usuarios y los motores de búsqueda; Si necesita crear una cuenta para ver un artículo, los usuarios irán a otro lado.

Bloquee el acceso desde el alojamiento en la nube y las direcciones IP del servicio de raspado

A veces, los scrapers se ejecutarán desde servicios de alojamiento web, como Amazon Web Services o GAE, o VPS. Limite el acceso a su sitio web (o muestre un captcha) para solicitudes originadas en las direcciones IP utilizadas por dichos servicios de alojamiento en la nube.

Del mismo modo, también puede limitar el acceso desde las direcciones IP utilizadas por los proveedores de proxy o VPN, ya que los raspadores pueden usar dichos servidores proxy para evitar que se detecten muchas solicitudes.

Tenga en cuenta que al bloquear el acceso de servidores proxy y VPN, afectará negativamente a los usuarios reales.

Haga que su mensaje de error sea anodino si bloquea

Si bloquea / limita el acceso, debe asegurarse de no decirle al raspador qué causó el bloqueo, dándole así pistas sobre cómo arreglar su raspador. Entonces, una mala idea sería mostrar páginas de error con texto como:

  • Demasiadas solicitudes de su dirección IP, intente nuevamente más tarde.

  • ¡Error, el encabezado del agente de usuario no está presente!

En su lugar, muestra un mensaje de error amigable que no le dice al raspador qué lo causó. Algo como esto es mucho mejor:

  • Perdón, algo salió mal. Puede ponerse en contacto con el servicio de asistencia técnica helpdesk@example.comsi el problema persiste.

Esto también es mucho más fácil de usar para usuarios reales, en caso de que alguna vez vean esa página de error. También debe considerar mostrar un captcha para solicitudes posteriores en lugar de un bloqueo duro, en caso de que un usuario real vea el mensaje de error, para que no bloquee y, por lo tanto, los usuarios legítimos se comuniquen con usted.

Utilice Captchas si sospecha que un raspador está accediendo a su sitio web.

Las captchas ("Prueba completamente automatizada para distinguir computadoras y humanos") son muy efectivas contra la detención de los raspadores. Desafortunadamente, también son muy efectivos para irritar a los usuarios.

Como tal, son útiles cuando sospecha de un posible raspador y desea detener el raspado, sin bloquear también el acceso en caso de que no sea un rascador sino un usuario real. Es posible que desee considerar mostrar un captcha antes de permitir el acceso al contenido si sospecha de un raspador.

Cosas a tener en cuenta al usar Captchas:

  • No enrolle el suyo, use algo como reCaptcha de Google : es mucho más fácil que implementar un captcha usted mismo, es más fácil de usar que una solución de texto borrosa y deformada que puede encontrar (los usuarios a menudo solo necesitan marcar una casilla) ), y también es mucho más difícil de resolver para un programador que una simple imagen servida desde su sitio

  • No incluya la solución para el captcha en el marcado HTML: en realidad he visto un sitio web que tenía la solución para el captcha en la página en sí (aunque está bastante oculto), lo que lo hace bastante inútil. No hagas algo como esto. Nuevamente, use un servicio como reCaptcha, y no tendrá este tipo de problema (si lo usa correctamente).

  • Las captchas se pueden resolver a granel: existen servicios de resolución de captcha en los que los humanos reales y de bajos salarios resuelven captchas a granel. Nuevamente, usar reCaptcha es una buena idea aquí, ya que tienen protecciones (como el tiempo relativamente corto que tiene el usuario para resolver el captcha). Es poco probable que se use este tipo de servicio a menos que sus datos sean realmente valiosos.

Sirve tu contenido de texto como una imagen

Puede representar el texto en un lado del servidor de imágenes y servirlo para que se muestre, lo que dificultará la extracción de texto de raspadores simples.

Sin embargo, esto es malo para los lectores de pantalla, los motores de búsqueda, el rendimiento y prácticamente todo lo demás. También es ilegal en algunos lugares (debido a la accesibilidad, por ejemplo, la Ley de Estadounidenses con Discapacidades), y también es fácil de eludir con algunos OCR, así que no lo hagas.

Puedes hacer algo similar con los sprites CSS, pero eso tiene los mismos problemas.

No exponga su conjunto de datos completo:

Si es factible, no proporcione una forma para que un script / bot obtenga todo su conjunto de datos. Como ejemplo: tiene un sitio de noticias, con muchos artículos individuales. Puede hacer que esos artículos solo sean accesibles buscándolos a través de la búsqueda en el sitio y, si no tiene una lista de todos los artículos en el sitio y sus URL en cualquier lugar, esos artículos solo serán accesibles mediante la búsqueda característica. Esto significa que una secuencia de comandos que desee eliminar todos los artículos de su sitio tendrá que buscar todas las frases posibles que puedan aparecer en sus artículos para encontrarlas, lo que llevará mucho tiempo, será terriblemente ineficiente y, con suerte, hará que el raspador se rinde.

Esto será ineficaz si:

  • El bot / script no quiere / necesita el conjunto de datos completo de todos modos.
  • Sus artículos se sirven desde una URL que se parece a algo así example.com/article.php?articleId=12345. Esto (y cosas similares) que permitirán a los raspadores simplemente iterar sobre todos los correos electrónicos articleIdy solicitar todos los artículos de esa manera.
  • Hay otras formas de encontrar todos los artículos, como escribir un script para seguir los enlaces dentro de los artículos que conducen a otros artículos.
  • Buscar algo como "y" o "el" puede revelar casi todo, por lo que es algo a tener en cuenta. (Puede evitar esto solo devolviendo los 10 o 20 resultados principales).
  • Necesita motores de búsqueda para encontrar su contenido.

No exponga sus API, puntos finales y cosas similares:

Asegúrese de no exponer ninguna API, incluso sin querer. Por ejemplo, si está utilizando AJAX o solicitudes de red desde Adobe Flash o Applets de Java (¡Dios no lo quiera!) Para cargar sus datos, es trivial mirar las solicitudes de red desde la página y averiguar a dónde van esas solicitudes, y luego realice ingeniería inversa y use esos puntos finales en un programa de raspado. Asegúrese de ofuscar sus puntos finales y hacer que sean difíciles de usar para otros, como se describe.

Para disuadir a los analizadores y raspadores HTML:

Dado que los analizadores HTML funcionan extrayendo contenido de páginas basadas en patrones identificables en el HTML, podemos cambiar intencionalmente esos patrones para romper estos raspadores, o incluso atornillarlos. La mayoría de estos consejos también se aplican a otros rascadores como arañas y raspadores de pantalla.

Cambia frecuentemente tu HTML

Los raspadores que procesan HTML directamente lo hacen extrayendo contenidos de partes específicas e identificables de su página HTML. Por ejemplo: si todas las páginas de su sitio web tienen divun identificador de article-content, que contiene el texto del artículo, entonces es trivial escribir un script para visitar todas las páginas del artículo en su sitio y extraer el texto del contenido del article-contentdiv. en cada página del artículo, y voilà, el raspador tiene todos los artículos de su sitio en un formato que puede reutilizarse en otro lugar.

Si cambia el HTML y la estructura de sus páginas con frecuencia, dichos raspadores ya no funcionarán.

  • Con frecuencia puede cambiar la identificación y las clases de elementos en su HTML, tal vez incluso automáticamente. Entonces, si se div.article-contentconvierte en algo así div.a4c36dda13eaf0y cambia cada semana, el raspador funcionará bien inicialmente, pero se romperá después de una semana. Asegúrese de cambiar la longitud de sus identificadores / clases también, de lo contrario, el raspador usará div.[any-14-characters]para encontrar el div deseado. Cuidado con otros agujeros similares también ...

  • Si no hay forma de encontrar el contenido deseado del marcado, el raspador lo hará de la forma en que está estructurado el HTML. Por lo tanto, si todas sus páginas de artículos son similares en que todos divdentro de una divque viene después de una h1es el contenido del artículo, raspadores obtendrá el contenido del artículo basado en eso. Nuevamente, para romper esto, puede agregar / eliminar marcas adicionales a su HTML, periódicamente y al azar, por ejemplo. agregando so divs adicionales span. Con el procesamiento HTML moderno del lado del servidor, esto no debería ser demasiado difícil.

Cosas a tener en cuenta:

  • Será tedioso y difícil de implementar, mantener y depurar.

  • Va a dificultar el almacenamiento en caché. Especialmente si cambia los identificadores o clases de sus elementos HTML, esto requerirá los cambios correspondientes en sus archivos CSS y JavaScript, lo que significa que cada vez que los cambie, el navegador deberá volver a descargarlos. Esto dará como resultado tiempos de carga de página más largos para los visitantes habituales y una mayor carga del servidor. Si solo lo cambia una vez por semana, no será un gran problema.

  • Los raspadores inteligentes aún podrán obtener su contenido al inferir dónde está el contenido real, por ejemplo. al saber que es probable que un solo bloque de texto grande en la página sea el artículo real. Esto permite encontrar y extraer los datos deseados de la página. Boilerpipe hace exactamente esto.

Esencialmente, asegúrese de que no sea fácil para un script encontrar el contenido deseado real para cada página similar.

Consulte también Cómo evitar que los rastreadores que dependen de XPath obtengan el contenido de la página para obtener detalles sobre cómo se puede implementar esto en PHP.

Cambia tu HTML en función de la ubicación del usuario

Esto es similar al consejo anterior. Si sirve HTML diferente según la ubicación / país de su usuario (determinado por la dirección IP), esto puede romper los raspadores que se entregan a los usuarios. Por ejemplo, si alguien está escribiendo una aplicación móvil que elimina datos de su sitio, funcionará bien inicialmente, pero se interrumpirá cuando realmente se distribuya a los usuarios, ya que esos usuarios pueden estar en un país diferente y, por lo tanto, obtener HTML diferente, que el El raspador incrustado no fue diseñado para consumir.

Cambie frecuentemente su HTML, ¡atornille activamente con los raspadores al hacerlo!

Un ejemplo: tiene una función de búsqueda en su sitio web, ubicada en example.com/search?query=somesearchquery, que devuelve el siguiente 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)

Como habrás adivinado, es fácil de borrar: todo lo que un raspador debe hacer es presionar la URL de búsqueda con una consulta y extraer los datos deseados del HTML devuelto. Además de cambiar periódicamente el HTML como se describió anteriormente, también puede dejar el marcado anterior con los identificadores y las clases anteriores, ocultarlo con CSS y llenarlo con datos falsos, envenenando así el raspador. Así es como se puede cambiar la página de resultados de búsqueda:

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

Esto significará que los scrapers escritos para extraer datos del HTML basados ​​en clases o IDs continuarán funcionando aparentemente, pero obtendrán datos falsos o incluso anuncios, datos que los usuarios reales nunca verán, ya que están ocultos con CSS.

Atornille con el raspador: inserte datos falsos e invisibles de honeypot en su página

Agregando al ejemplo anterior, puede agregar elementos invisibles de honeypot a su HTML para atrapar los raspadores. Un ejemplo que podría agregarse a la página de resultados de búsqueda descrita anteriormente:

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

Un raspador escrito para obtener todos los resultados de búsqueda recogerá esto, al igual que cualquiera de los otros resultados de búsqueda reales en la página, y visitará el enlace, buscando el contenido deseado. Un ser humano real nunca lo verá en primer lugar (debido a que está oculto con CSS), y no visitará el enlace. Una araña genuina y deseable como la de Google tampoco visitará el enlace porque no lo permitiste /scrapertrap/en tu robots.txt.

Puede scrapertrap.phphacer algo como bloquear el acceso para la dirección IP que lo visitó o forzar un captcha para todas las solicitudes posteriores de esa IP.

  • No olvide no permitir su honeypot ( /scrapertrap/) en su archivo robots.txt para que los robots de los motores de búsqueda no caigan en él.

  • Puede / debe combinar esto con el consejo anterior de cambiar su HTML con frecuencia.

  • Cambie esto con frecuencia también, ya que los raspadores eventualmente aprenderán a evitarlo. Cambie la URL y el texto del honeypot. También desee considerar cambiar el CSS en línea utilizado para ocultar, y utilizar un atributo de ID y CSS externo en su lugar, ya que los scrapers aprenderán a evitar cualquier cosa que tenga un styleatributo con CSS utilizado para ocultar el contenido. También intente habilitarlo solo a veces, para que el raspador funcione inicialmente, pero se rompa después de un tiempo. Esto también se aplica al consejo anterior.

  • Las personas malintencionadas pueden evitar el acceso de usuarios reales compartiendo un enlace a su honeypot, o incluso incrustando ese enlace en algún lugar como una imagen (por ejemplo, en un foro). Cambie la URL con frecuencia y haga que los tiempos de prohibición sean relativamente cortos.

Sirva datos falsos e inútiles si detecta un raspador

Si detecta lo que obviamente es un raspador, puede servir datos falsos e inútiles; esto corromperá los datos que el raspador obtiene de su sitio web. También debe hacer que sea imposible distinguir esos datos falsos de los datos reales, para que los raspadores no sepan que están siendo atornillados.

Como ejemplo: tiene un sitio web de noticias; Si detecta un raspador, en lugar de bloquear el acceso, presente artículos falsos generados aleatoriamente , y esto envenenará los datos que obtiene el raspador. Si hace que sus datos falsos sean indistinguibles de los reales, dificultará que los raspadores obtengan lo que desean, es decir, los datos reales y reales.

No acepte solicitudes si el Agente de usuario está vacío / falta

A menudo, los raspadores escritos perezosamente no enviarán un encabezado de Agente de usuario con su solicitud, mientras que todos los navegadores, así como las arañas de los motores de búsqueda lo harán.

Si recibe una solicitud donde el encabezado del Agente de usuario no está presente, puede mostrar un captcha, o simplemente bloquear o limitar el acceso. (O sirva datos falsos como se describe anteriormente, o algo más ..)

Es trivial engañar, pero vale la pena implementarlo como medida contra los raspadores mal escritos.

No acepte solicitudes si el Agente de usuario es un raspador común; listas negras utilizadas por los rascadores

En algunos casos, los raspadores usarán un agente de usuario que no utiliza un navegador real o una araña de motor de búsqueda, como:

  • "Mozilla" (Solo eso, nada más. He visto algunas preguntas sobre el raspado aquí, usar eso. Un navegador real nunca usará solo eso)
  • "Java 1.7.43_u43" (Por defecto, HttpUrlConnection de Java usa algo como esto).
  • "BIZCO EasyScraping Studio 2.0"
  • "wget", "curl", "libcurl", .. (Wget y cURL a veces se usan para el raspado básico)

Si encuentra que los raspadores de su sitio usan una cadena específica de Agente de usuario y no la usan navegadores reales ni arañas legítimas, también puede agregarla a su lista negra.

Si no solicita activos (CSS, imágenes), no es un navegador real.

Un navegador real (casi siempre) solicitará y descargará activos como imágenes y CSS. Los analizadores y raspadores HTML no lo harán, ya que solo están interesados ​​en las páginas reales y su contenido.

Puede registrar solicitudes en sus activos, y si ve muchas solicitudes solo para HTML, puede ser un raspador.

Tenga en cuenta que los robots de los motores de búsqueda, los dispositivos móviles antiguos, los lectores de pantalla y los dispositivos mal configurados tampoco pueden solicitar activos.

Usar y requerir cookies; úselas para rastrear las acciones de usuario y scraper.

Puede solicitar que se habiliten las cookies para ver su sitio web. Esto disuadirá a los escritores de raspadores novatos y novatos, sin embargo, es fácil que un raspador envíe cookies. Si los usa y los requiere, puede rastrear las acciones del usuario y el raspador con ellos, y así implementar límites de velocidad, bloqueo o mostrar captchas por usuario en lugar de por IP.

Por ejemplo: cuando el usuario realiza una búsqueda, configure una cookie de identificación única. Cuando se vean las páginas de resultados, verifique esa cookie. Si el usuario abre todos los resultados de búsqueda (puede verlo en la cookie), entonces probablemente sea un raspador.

El uso de cookies puede ser ineficaz, ya que los raspadores también pueden enviar las cookies con sus solicitudes y descartarlas según sea necesario. También evitará el acceso de usuarios reales que tengan deshabilitadas las cookies, si su sitio solo funciona con cookies.

Tenga en cuenta que si usa JavaScript para configurar y recuperar la cookie, bloqueará los raspadores que no ejecutan JavaScript, ya que no pueden recuperar y enviar la cookie con su solicitud.

Use JavaScript + Ajax para cargar su contenido

Puede usar JavaScript + AJAX para cargar su contenido después de que se cargue la página. Esto hará que el contenido sea inaccesible para los analizadores HTML que no ejecutan JavaScript. Esto es a menudo un elemento disuasorio efectivo para los programadores novatos y sin experiencia que escriben raspadores.

Ser consciente de:

  • El uso de JavaScript para cargar el contenido real degradará la experiencia y el rendimiento del usuario

  • Los motores de búsqueda tampoco pueden ejecutar JavaScript, lo que impide que indexen su contenido. Esto puede no ser un problema para las páginas de resultados de búsqueda, pero puede ser para otras cosas, como páginas de artículos.

Ofusque su marcado, las solicitudes de red de los scripts y todo lo demás.

Si usa Ajax y JavaScript para cargar sus datos, ofusque los datos que se transfieren. Como ejemplo, podría codificar sus datos en el servidor (con algo tan simple como base64 o más complejo) y luego decodificarlos y mostrarlos en el cliente, después de obtenerlos a través de Ajax. Esto significará que alguien que inspeccione el tráfico de la red no verá de inmediato cómo funciona su página y carga los datos, y será más difícil para alguien solicitar directamente los datos de solicitud de sus puntos finales, ya que tendrán que realizar ingeniería inversa en su algoritmo de descifrado.

  • Si usa Ajax para cargar los datos, debería dificultar el uso de los puntos finales sin cargar primero la página, por ejemplo, requiriendo alguna clave de sesión como parámetro, que puede incrustar en su JavaScript o HTML.

  • También puede incrustar sus datos ofuscados directamente en la página HTML inicial y usar JavaScript para desofuscar y mostrarlos, lo que evitaría las solicitudes de red adicionales. Hacer esto hará que sea mucho más difícil extraer los datos utilizando un analizador solo HTML que no ejecute JavaScript, ya que el que escribe el raspador tendrá que aplicar ingeniería inversa a su JavaScript (que también debe ofuscar).

  • Es posible que desee cambiar sus métodos de ofuscación regularmente, para romper los raspadores que lo han descubierto.

Sin embargo, hay varias desventajas de hacer algo como esto:

  • Será tedioso y difícil de implementar, mantener y depurar.

  • Será ineficaz contra los raspadores y los raspadores de pantalla que realmente ejecutan JavaScript y luego extraen los datos. (Sin embargo, la mayoría de los analizadores HTML simples no ejecutan JavaScript)

  • Hará que su sitio no funcione para usuarios reales si tienen JavaScript deshabilitado.

  • El rendimiento y los tiempos de carga de la página sufrirán.

No técnico:

  • Dile a la gente que no raspe, y algunos lo respetarán

  • Encuentra un abogado

  • Haga que sus datos estén disponibles, proporcione una API:

    Puede hacer que sus datos estén fácilmente disponibles y requerir atribución y un enlace a su sitio. Quizás cobrar $$$ por ello.

Diverso:

  • También hay servicios comerciales de protección contra raspado, como el anti-raspado de Cloudflare o Distill Networks (detalles sobre cómo funciona aquí ), que hacen estas cosas y más para usted.

  • Encuentre un equilibrio entre la usabilidad para usuarios reales y la resistencia a los raspadores: todo lo que haga impactará negativamente en la experiencia del usuario de una forma u otra, encuentre compromisos.

  • No olvides tu sitio móvil y tus aplicaciones. Si tiene una aplicación móvil, también se puede ver la captura de pantalla y se puede inspeccionar el tráfico de red para determinar los puntos finales REST que utiliza.

  • Los raspadores pueden raspar a otros raspadores: si hay un sitio web que tiene contenido raspado del suyo, otros raspadores pueden raspar desde el sitio web de ese raspador.

Otras lecturas:


11
Esto me trajo aquí. Una respuesta bastante impresionante. Además, un historial de revisiones bastante sorprendente. Gracias por la publicacion. Obtienes un voto a favor. No solo por la cantidad de esfuerzo puesto en esto, sino porque es útil para mí.
DaveTheMinion

1
¡Gran respuesta! Aquí hay algunos pensamientos. A real browser will (almost always) request and download assets such as images and CSSTambién es cierto para los lectores de accesibilidad? CAPTCHA está roto, por lo que al menos los servicios profesionales probablemente no se vean obstaculizados por él. El uso de cookies requiere notificación / consentimiento en la UE. Find a balance between usability for real users and scraper-proofnessTambién equilibre el tiempo de programación / complejidad vs. beneficio financiero.
Eric J.

55
@ Jonh, si están interesados, lo leerán. Además, lo he dividido en párrafos con encabezados y subtítulos, para que las personas puedan escanearlo y leer las partes que deseen. De hecho, hay bastantes respuestas igualmente largas sobre SO, y la gente las lee.
JonasCz - Restablece a Mónica

2
@JoshCrozier: creo que sitios como este no funcionan bien con tanta información. No digo que la información sea mala.
JonH

2
PD: Mi huella esteganográfica de la idea de contenido podría usarse en un tribunal de justicia. Imagine la conmoción cuando demuestra que el poseedor de sus datos los obtuvo de usted, a través de las características únicas directamente en los datos ...
ErikE

241

Presumiré que has configurado robots.txt.

Como otros han mencionado, los raspadores pueden falsificar casi todos los aspectos de sus actividades, y probablemente sea muy difícil identificar las solicitudes que provienen de los malos.

Yo consideraría:

  1. Configurar una página /jail.html,.
  2. No permitir el acceso a la página en robots.txt(por lo que las arañas respetuosas nunca visitarán).
  3. Coloque un enlace en una de sus páginas, ocultándolo con CSS ( display: none).
  4. Registre las direcciones IP de los visitantes a /jail.html.

Esto podría ayudarlo a identificar rápidamente las solicitudes de los raspadores que descartan su flagrantemente robots.txt.

Usted también puede hacer que su /jail.htmlun sitio web completo conjunto que tiene el mismo margen de beneficio, exactamente como páginas normales, pero con datos falsos ( /jail/album/63ajdka, /jail/track/3aads8, etc.). De esta manera, los raspadores malos no serán alertados de "entrada inusual" hasta que tenga la oportunidad de bloquearlos por completo.


48
He visto esta técnica conocida como "honeypot" antes. Es una técnica también utilizada en el filtrado de correo no deseado, donde se coloca una dirección de correo electrónico en una página pero se oculta o deja en claro que no es para que las personas envíen correo legítimo. Luego, recopile la dirección IP de cualquier servidor de correo que entregue el correo a esa dirección.
thomasrutter

12
Esto supone que son enlaces de rastreo. La mayoría de los scrapers intentarán someterse a algún tipo de formulario y raspar los datos devueltos.
Byron Whitlock

99
He visto honeypots basados ​​en Perl para correo electrónico que tienen enlaces a otras "páginas" generadas por el script de Perl. Los bots legítimos que leen robots.txt no lo miran, y está oculto para los usuarios a través de CSS, pero los raspadores (o recolectores de correo electrónico) quedan atrapados rápidamente en un árbol de páginas de profundidad infinita, todos con datos incorrectos. Pon un enlace al script justo al comienzo de cada una de tus páginas.
Stephen P

18
Otra cosa increíble para los honeypots es el grifo de lágrimas (o lonas). Esta es una técnica antigua que me encanta: cuando identificas a un chico malo, detienes su proceso de spam / raspado al mantener deliberadamente abiertas sus conexiones durante el mayor tiempo posible físicamente sin agotarlas. Por supuesto, esto puede alertarlos de que tú también estás con ellos, pero Dios mío, es divertido. es.wikipedia.org/wiki/Teergrubing
womp

11
El único problema con este enfoque es si coloco [ img] yoursite / jail.html [/ img] en un foro popular. Recibirá toneladas de IP registradas en su sistema y será difícil filtrar cuál es la mala. Si desea evitar este tipo de cosas, debe agregar un token asociado con IP en la URL. Algo así como jail.php? T = hoeyvm y en la base de datos tiene una asociación de hoeyvm y la IP que solicitó la página.
HoLyVieR

48

Sue 'em.

En serio: si tiene algo de dinero, hable con un abogado bueno, agradable y joven que sepa cómo moverse por Internet. Realmente podrías hacer algo aquí. Dependiendo de dónde estén ubicados los sitios, puede pedirle a un abogado que escriba un cese y desistimiento o su equivalente en su país. Al menos puedes asustar a los bastardos.

Documente la inserción de sus valores ficticios. Inserte valores ficticios que lo señalen de manera clara (pero oscura). Creo que esta es una práctica común con las compañías de guías telefónicas, y aquí en Alemania, creo que ha habido varios casos en que los imitadores fueron capturados a través de entradas falsas que copiaron 1: 1.

Sería una pena si esto lo llevara a desordenar su código HTML, arrastrando hacia abajo el SEO, la validez y otras cosas (a pesar de que un sistema de plantillas que utiliza una estructura HTML ligeramente diferente en cada solicitud de páginas idénticas ya podría ayudar mucho contra raspadores que siempre se basan en estructuras HTML y nombres de clase / ID para sacar el contenido).

Casos como este son para lo que sirven las leyes de copyright. Arrancar el trabajo honesto de otras personas para ganar dinero es algo contra lo que deberías poder luchar.


99
solo funciona en países con marcos legales sólidos.
TomL

3
Los abogados prosperan en el conflicto y se benefician de él. Raramente, si alguna vez, un abogado le aconsejará que no vaya a la corte. Cualquiera que lo haya dicho le dirá que ganar y perder no tiene nada que ver con los conceptos finos de "justicia" sino con los argumentos, estados de ánimo y prejuicios del día. Recuerde que si sale mal, usted podría ser responsable no solo de los costos de su abogado, sino también de las otras partes, y si deciden contrademandar, bueno. Podría perder fácilmente su hogar y cualquier otro activo en su vida. No es una apuesta, sugeriría. Le recomiendo que evite los tribunales a toda costa.
Frankie

3
Estoy de acuerdo con @TomL. Si están en Occidente, es algo plausible. Pero si están en India / China / Rusia / Ucrania / lo que sea, entonces, en serio, mínimo o ninguna posibilidad. Puedo decir sobre los tribunales rusos: ni siquiera se molestarán en trabajar con sus reclamos.
Highstaker

35

Realmente no hay nada que pueda hacer para evitar esto por completo. Los raspadores pueden falsificar su agente de usuario, usar múltiples direcciones IP, etc. y aparecer como un usuario normal. Lo único que puede hacer es hacer que el texto no esté disponible en el momento en que se carga la página: hacerlo con imagen, flash o cargarlo con JavaScript. Sin embargo, las dos primeras son malas ideas, y la última sería un problema de accesibilidad si JavaScript no está habilitado para algunos de sus usuarios habituales.

Si están bloqueando absolutamente su sitio y rebuscando en todas sus páginas, podría hacer algún tipo de limitación de velocidad.

Sin embargo, hay algo de esperanza. Los raspadores confían en que los datos de su sitio estén en un formato consistente. Si pudieras aleatorizarlo de alguna manera, podría romper su raspador. Cosas como cambiar la ID o los nombres de clase de los elementos de página en cada carga, etc. Pero eso es mucho trabajo y no estoy seguro de si vale la pena. E incluso entonces, probablemente podrían sortearlo con suficiente dedicación.


14
Crear un sistema que limite cuántas páginas puede ver una IP por minuto es un buen truco, ya que los raspadores de pantalla atravesarán el sitio mucho más rápido que cualquier persona normal.
TravisO

Convenido. Las IP cuestan dinero y están limitadas por la mayoría de las empresas de hosting.
Tal Weiss

re: "Cosas como cambiar el ID o los nombres de clase de elementos de página en cada carga, etc." Eso no es tan malo si crea un nombre de clase a través de PHP y luego usa <div class = "<? Php echo $ myPHPGeneratedClassName;?>"> Incluso podría usar cadenas aleatorias para hacerlo completamente único. Cualquier cosa que les impida encontrar patrones hace que sea mucho más difícil analizar el DOM.
queja el

No es difícil encontrar una IP. Hay muchos servidores proxy, computadoras de amigos, computadoras de trabajo, computadoras de la escuela, computadoras de la biblioteca ...
Incógnito

@ user257493: Cierto, pero estamos hablando de alguien que está raspando datos aquí. Lo más probable es que no van a ir a que tanto esfuerzo sólo para datos de la cosecha. Y si lo hacen, eventualmente agotarán su suministro de IP.
ryeguy

31

Proporcione una API XML para acceder a sus datos; de una manera simple de usar. Si la gente quiere sus datos, los obtendrán, es mejor que lo haga todo.

De esta manera, puede proporcionar un subconjunto de funcionalidades de manera efectiva, asegurando que, al menos, los raspadores no engullen solicitudes HTTP y grandes cantidades de ancho de banda.

Entonces, todo lo que tiene que hacer es convencer a las personas que desean que sus datos usen la API. ;)


3
Esto parece muy razonable. Es muy difícil evitar el raspado de pantalla, y si proporciona una API, puede ponerle algunas restricciones, agregar avisos ("Contenido de ----.com") y, básicamente, controlar qué datos se proporcionan.
alecwh

66
@alecwh: y cobrar por el acceso!
André Caron el

3
Le he otorgado la recompensa, en parte porque la web sería mucho mejor si cada sitio web hiciera esto. Esperemos que se vuelva más común.
JonasCz - Restablece a Mónica

1
Tan pronto como los haga registrarse para el servicio, regresarán al sitio normal
mplungjan

Soy una de esas personas en el lado opuesto de esta conversación. Construyo modelos para espectáculos de Broadway y tengo que raspar todos mis datos en lugar de acceder de forma ordenada.
Yaakov Bressler

22

Lo siento, es realmente bastante difícil hacer esto ...

Te sugiero que les pidas cortésmente que no usen tu contenido (si tu contenido tiene derechos de autor).

Si es así y no lo eliminan, puede tomar medidas adicionales y enviarles una carta de cese y desistimiento .

En general, cualquier cosa que haga para evitar el raspado probablemente terminará con un efecto más negativo, por ejemplo, accesibilidad, bots / arañas, etc.


12

De acuerdo, como dicen todas las publicaciones, si quieres que sea amigable para los motores de búsqueda, entonces los bots pueden raspar con seguridad.

Pero aún puede hacer algunas cosas, y puede ser afectivo para 60-70% de robots de raspado.

Haga un script de corrector como a continuación.

Si una dirección IP particular está visitando muy rápido, luego de algunas visitas (5-10) ponga su dirección IP + información del navegador en un archivo o base de datos.

El siguiente paso

(Este sería un proceso en segundo plano y se ejecutaría todo el tiempo o se programaría después de unos minutos). Cree un script que siga revisando esas direcciones IP sospechosas.

Caso 1. Si el Agente de usuario es de un motor de búsqueda conocido como Google, Bing , Yahoo (puede encontrar más información sobre agentes de usuario buscándolo en Google). Entonces debes ver http://www.iplists.com/ . Esta lista e intenta hacer coincidir los patrones. Y si parece un agente de usuario falso, solicite completar un CAPTCHA en la próxima visita. (Necesita investigar un poco más sobre las direcciones IP de los bots. Sé que esto se puede lograr y también intentar whois de la dirección IP. Puede ser útil).

Caso 2. Ningún agente de usuario de un robot de búsqueda: simplemente solicite completar un CAPTCHA en la próxima visita.


+1 Usar iplists.com es una excelente idea
Daniel Trebbien

10

Respuesta tardía, y esta respuesta probablemente no sea la que desea escuchar ...

Yo ya escribí muchos (muchas decenas) de diferentes raspadores especializados de minería de datos. (solo porque me gusta la filosofía de "datos abiertos").

Aquí hay muchos consejos en otras respuestas: ahora desempeñaré el papel de defensor del diablo y extenderé y / o corregiré su efectividad.

Primero:

  • si alguien realmente quiere tus datos
  • no puede ocultar (técnicamente) sus datos de manera efectiva
  • si los datos deberían ser de acceso público para sus "usuarios habituales"

Intentar usar algunas barreras técnicas no vale la pena, porque:

  • a sus usuarios habituales al empeorar su experiencia de usuario
  • a bots regulares y bienvenidos (motores de búsqueda)
  • etc ...

HMTL liso : la forma más fácil es analizar las páginas HTML simples, con una estructura bien definida y clases CSS. Por ejemplo, es suficiente inspeccionar el elemento con Firebug y usar los Xpaths correctos y / o la ruta CSS en mi raspador.

Puede generar la estructura HTML dinámicamente y también puede generar dinámicamente los nombres de clase CSS (y el CSS también) (por ejemplo, usando algunos nombres de clase aleatorios), pero

  • desea presentar la información a sus usuarios habituales de manera coherente
  • Por ejemplo, una vez más, es suficiente analizar la estructura de la página para configurar el raspador.
  • y se puede hacer automáticamente analizando algunos "contenidos ya conocidos"
    • una vez que alguien ya sabe (por un rasguño anterior), por ejemplo:
    • que contiene la información sobre "phil collins"
    • muestra la página "phil collins" y analiza (automáticamente) cómo está estructurada la página "hoy" :)

No puede cambiar la estructura de cada respuesta, porque sus usuarios habituales lo odiarán. Además, esto le causará más problemas (mantenimiento) no al raspador. La ruta XPath o CSS es determinable por el script de raspado automáticamente del contenido conocido.

Ajax : un poco más difícil al principio, pero muchas veces acelera el proceso de raspado :): ¿por qué?

Al analizar las solicitudes y respuestas, acabo de configurar mi propio servidor proxy (escrito en perl) y mi Firefox lo está utilizando. Por supuesto, debido a que es mi propio proxy, está completamente oculto, el servidor de destino lo ve como un navegador normal. (Entonces, no hay X-Forward-for y tales encabezados). Sobre la base de los registros de proxy, en su mayoría es posible determinar la "lógica" de las solicitudes ajax, por ejemplo, podría omitir la mayor parte del raspado html y simplemente usar las respuestas ajax bien estructuradas (principalmente en formato JSON).

Entonces, el ajax no ayuda mucho ...

Algunas más complicadas son las páginas que utilizan funciones javascript muy empaquetadas .

Aquí es posible usar dos métodos básicos:

  • descomprima y comprenda el JS y cree un raspador que siga la lógica de Javascript (de la manera difícil)
  • o (preferiblemente usando solo) - simplemente usando Mozilla con Mozrepl para raspar. Por ejemplo, el verdadero raspado se realiza en un navegador con todas las funciones habilitadas para JavaScript, que está programado para hacer clic en los elementos correctos y simplemente tomar las respuestas "decodificadas" directamente desde la ventana del navegador.

Tal raspado es lento (el raspado se realiza como en el navegador normal), pero es

  • Muy fácil de configurar y utilizar
  • y es casi imposible contrarrestarlo :)
  • y la "lentitud" es necesaria de todos modos para contrarrestar el "bloqueo de las mismas solicitudes rápidas basadas en IP"

El filtrado basado en User-Agent no ayuda en absoluto. Cualquier minero de datos serio lo configurará como correcto en su raspador.

Requerir inicio de sesión : no ayuda. La forma más simple de vencerlo (sin analizar y / o crear secuencias de comandos del protocolo de inicio de sesión) es simplemente iniciar sesión en el sitio como usuario normal, usar Mozilla y luego simplemente ejecutar el raspador basado en Mozrepl ...

Recuerde, la solicitud de inicio de sesión ayuda para bots anónimos, pero no ayuda contra alguien que quiera raspar sus datos. Simplemente se registra en su sitio como usuario habitual.

Usar marcos tampoco es muy efectivo. Esto es utilizado por muchos servicios de películas en vivo y no es muy difícil de superar. Los marcos son simplemente otras páginas HTML / Javascript que se necesitan para analizar ... Si los datos valen la pena, el minero de datos hará el análisis requerido.

La limitación basada en IP no es efectiva en absoluto: aquí hay demasiados servidores proxy públicos y también aquí está el TOR ... :) No ralentiza el raspado (para alguien que realmente quiere sus datos).

Muy difícil es raspar los datos ocultos en las imágenes. (por ejemplo, simplemente convirtiendo los datos en imágenes del lado del servidor). Emplear "tesseract" (OCR) ayuda muchas veces, pero honestamente, los datos deben valer la pena para el raspador. (que muchas veces no vale)

Por otro lado, sus usuarios lo odiarán por esto. Yo mismo, (incluso cuando no raspamos) odio los sitios web que no permiten copiar el contenido de la página en el portapapeles (porque la información está en las imágenes, o (las tontas) tratando de vincular al clic derecho en un evento Javascript personalizado): )

Los más difíciles son los sitios que usan java applets o flash , y el applet usa solicitudes https seguras internamente . Pero piénselo dos veces: cuán felices serán los usuarios de su iPhone ...;). Por lo tanto, actualmente muy pocos sitios los usan. Yo mismo, bloqueando todo el contenido flash en mi navegador (en sesiones regulares de navegación), y nunca usando sitios que dependen de Flash.

Sus hitos podrían ser ..., por lo que puede probar este método, solo recuerde, probablemente perderá algunos de sus usuarios. También recuerde, algunos archivos SWF son descompilables. ;)

Captcha (los buenos, como reCaptcha) ayuda mucho, pero tus usuarios te odiarán ... imagínate cómo te amarán tus usuarios cuando necesiten resolver algunos captchas en todas las páginas que muestran información sobre los artistas de la música.

Probablemente no necesite continuar, ya se metió en la imagen.

Ahora lo que debes hacer:

Recuerde: es casi imposible ocultar sus datos si, por otro lado, desea publicarlos (de manera amigable) para sus usuarios habituales.

Entonces,

  • hacer que sus datos sean fácilmente accesibles - por alguna API
    • esto permite el fácil acceso a datos
    • por ejemplo, descargue su servidor del raspado, bien por usted
  • configurar los derechos de uso correctos (por ejemplo, debe citar la fuente)
  • recuerde, muchos datos no tienen derechos de autor y son difíciles de proteger
  • agregue algunos datos falsos (como ya lo hizo) y use herramientas legales
    • como ya han dicho otros, envíe una "carta de cese y desistimiento"
    • otras acciones legales (demandar y similares) probablemente sean demasiado costosas y difíciles de ganar (especialmente contra sitios no estadounidenses)

Piénselo dos veces antes de intentar usar algunas barreras técnicas.

En lugar de intentar bloquear a los mineros de datos, simplemente agregue más esfuerzos a la usabilidad de su sitio web. Tu usuario te amará. El tiempo (y la energía) invertido en barreras técnicas generalmente no valen la pena: es mejor dedicar el tiempo para hacer un sitio web aún mejor ...

Además, los ladrones de datos no son como los ladrones normales.

Si compra una alarma doméstica económica y agrega una advertencia "esta casa está conectada a la policía", muchos ladrones ni siquiera intentarán entrar. Porque un movimiento equivocado de él, y él irá a la cárcel ...

Entonces, invierte solo unos pocos dólares, pero el ladrón invierte y arriesga mucho.

Pero el ladrón de datos no tiene tales riesgos. todo lo contrario: si realiza un movimiento incorrecto (por ejemplo, si introduce algún ERROR como resultado de barreras técnicas), perderá a sus usuarios. Si el bot de raspado no funciona por primera vez, no pasa nada: el minero de datos solo intentará otro enfoque y / o depurará el script.

En este caso, necesita invertir mucho más, y el raspador invierte mucho menos.

Solo piense dónde quiere invertir su tiempo y energía ...

PD: el inglés no es mi nativo, así que perdona mi inglés roto ...


@Parapluie Realmente deberías leer sobre el contenido gratuito y / o sobre el modelo de código abierto , sobre las fechas, su historia, objetivos y ética. Y especialmente sobre los Datos Abiertos , para los cuales creé la mayoría de mis raspadores ...
jm666

Entiendo el concepto, aunque le agradezco sus recomendaciones eruditas. Podríamos haber tenido una conversación interesante sobre eso; pero parece que mi comentario original ha sido eliminado por un tercero. Entonces, ¿somos realmente libres después de todo?
Parapluie

8

Desde una perspectiva tecnológica: solo modele lo que Google hace cuando los golpea con demasiadas consultas a la vez. Eso debería detenerlo mucho.

Desde una perspectiva legal: Parece que los datos que está publicando no son propietarios. Lo que significa que está publicando nombres y estadísticas y otra información que no puede tener derechos de autor.

Si este es el caso, los raspadores no están violando los derechos de autor al redistribuir su información sobre el nombre del artista, etc. Sin embargo, pueden estar violando los derechos de autor cuando cargan su sitio en la memoria porque su sitio contiene elementos con derechos de autor (como el diseño, etc.).

Recomiendo leer sobre Facebook v. Power.com y ver los argumentos que Facebook usó para detener el raspado de pantalla. Hay muchas formas legales en las que puedes tratar de evitar que alguien raspe tu sitio web. Pueden ser de largo alcance e imaginativos. A veces los tribunales compran los argumentos. A veces no lo hacen.

Pero, suponiendo que esté publicando información de dominio público que no tiene derechos de autor como nombres y estadísticas básicas ... solo debe dejarla ir en nombre de la libertad de expresión y los datos abiertos. Es decir, de qué se trata la web.


1
Aunque es posible que no pueda proteger la información de los derechos de autor, definitivamente puede poner una cláusula contra el raspado en los términos de uso. Luego, envíe una carta de cese y desistimiento por violación de los términos de uso.
André Caron el

1
¡La libertad de expresión y los datos abiertos son de hecho el espíritu de Internet!
Ciara

Sí, libertad de expresión y todo eso. Pero, los raspadores bien podrían estar desperdiciando una cantidad significativa del presupuesto o ancho de banda del OP, así como copiando datos no copiables.
jpaugh

8

Cosas que podrían funcionar contra los raspadores para principiantes:

  • Bloqueo de IP
  • usa mucho ajax
  • comprobar encabezado de solicitud de árbitro
  • requiere inicio de sesión

Cosas que ayudarán en general:

  • cambia tu diseño cada semana
  • robots.txt

Cosas que ayudarán pero harán que tus usuarios te odien:

  • captcha

8

He hecho un montón de raspado web y resumí algunas técnicas para detener los raspadores web en mi blog en función de lo que encuentro molesto.

Es una compensación entre sus usuarios y los rascadores. Si limita las IP, use CAPTCHA, requiera inicio de sesión, etc., le resultará difícil a los scrapers. Pero esto también puede alejar a sus usuarios genuinos.


8

Desafortunadamente, su mejor opción es bastante manual: busque patrones de tráfico que considere indicativos de raspado y prohíba sus direcciones IP.

Dado que está hablando de un sitio público, hacer que el sitio sea compatible con los motores de búsqueda también hará que el sitio sea fácil de raspar. Si un motor de búsqueda puede rastrear y raspar su sitio, también puede hacerlo un raspador malicioso. Es una línea muy fina para caminar.


44
El bloqueo de IP ralentizará un raspador, pero también es mucho trabajo para su servidor. Digamos que te raspé con 1000 proxies, todavía tengo los datos que quiero y ahora tu firewall es un desastre.
pguardiario

1
Cuando hagas eso, se irán horizontales sobre ti. 100000 direcciones hoy no cuestan nada para ellos, pero ralentiza su sitio si intenta prohibirlos a todos, y rotarán las IP para no visitar más de una o dos veces
Mplungjan

6

Claro que es posible. Para un 100% de éxito, desconecte su sitio.

En realidad, puede hacer algunas cosas que dificulten un poco el raspado. Google realiza comprobaciones en el navegador para asegurarse de que no sea un robot raspando los resultados de búsqueda (aunque esto, como la mayoría de los demás, puede ser falsificado).

Puede hacer cosas como requerir varios segundos entre la primera conexión a su sitio y los clics posteriores. No estoy seguro de cuál sería el momento ideal o exactamente cómo hacerlo, pero esa es otra idea.

Estoy seguro de que hay otras personas que tienen mucha más experiencia, pero espero que esas ideas sean al menos algo útiles.


6

Hay algunas cosas que puede hacer para intentar evitar el raspado de la pantalla. Algunos no son muy efectivos, mientras que otros (un CAPTCHA) lo son, pero dificultan la usabilidad. También debe tener en cuenta que puede obstaculizar los raspadores de sitios legítimos, como los índices de los motores de búsqueda.

Sin embargo, supongo que si no lo quieres raspar, eso significa que tampoco quieres que los motores de búsqueda lo indexen.

Aquí hay algunas cosas que puedes probar:

  • Mostrar el texto en una imagen. Esto es bastante confiable, y es menos doloroso para el usuario que un CAPTCHA, pero significa que no podrán cortar y pegar y no se escalará con precisión ni será accesible.
  • Use un CAPTCHA y solicite que se complete antes de regresar la página. Este es un método confiable, pero también el mayor dolor para imponer a un usuario.
  • Solicite al usuario que se registre para obtener una cuenta antes de ver las páginas y confirme su dirección de correo electrónico. Esto será bastante efectivo, pero no del todo: un raspador de pantalla puede configurar una cuenta y puede programar inteligentemente su script para iniciar sesión en ellos.
  • Si la cadena de agente de usuario del cliente está vacía, bloquee el acceso. Un script de raspado de sitio a menudo se programará perezosamente y no establecerá una cadena de agente de usuario, mientras que todos los navegadores web lo harán.
  • Puede configurar una lista negra de cadenas conocidas de agente de usuario de raspador de pantalla a medida que las descubre. Una vez más, esto solo ayudará a los vagos codificados; un programador que sabe lo que está haciendo puede configurar una cadena de agente de usuario para hacerse pasar por un navegador web.
  • Cambie la ruta URL a menudo. Cuando lo cambie, asegúrese de que el anterior siga funcionando, pero solo durante el tiempo en que un usuario pueda tener abierto su navegador. Haga que sea difícil predecir cuál será la nueva ruta URL. Esto dificultará que los scripts lo tomen si su URL está codificada. Sería mejor hacer esto con algún tipo de script.

Si tuviera que hacer esto, probablemente usaría una combinación de los últimos tres, ya que minimizan las molestias para los usuarios legítimos. Sin embargo, tendrías que aceptar que no podrás bloquear a todos de esta manera y una vez que alguien descubra cómo evitarlo, podrá rasparlo para siempre. Entonces podría tratar de bloquear sus direcciones IP a medida que las descubre, supongo.


6
  1. No, no es posible parar (de ninguna manera)
  2. Abrázalo. ¿Por qué no publicar como RDFa y convertirse en un motor de búsqueda súper amigable y fomentar la reutilización de datos? La gente te lo agradecerá y te otorgará el crédito que corresponda (ver musicbrainz como ejemplo).

Probablemente no sea la respuesta que desea, pero ¿por qué ocultar lo que intenta hacer público?


5

Método uno (solo sitios pequeños):
Sirva datos cifrados / codificados.
Escapé de la web usando python (urllib, peticiones, beautifulSoup, etc.) y encontré muchos sitios web que sirven datos cifrados / codificados que no se pueden descifrar en ningún lenguaje de programación simplemente porque el método de cifrado no existe.

Logré esto en un sitio web de PHP encriptando y minimizando la salida (ADVERTENCIA: esta no es una buena idea para sitios grandes), la respuesta siempre fue contenido confuso.

Ejemplo de minimizar la salida en PHP ( ¿Cómo minimizar la salida html de la página php? ):

<?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");
?>

Método dos:
si no puede detenerlos, atorníllelos y sirva datos falsos / inútiles como respuesta.

Método tres:
bloquee los agentes de usuario de raspado comunes, verá esto en los sitios web principales / grandes ya que es imposible rasparlos con "python3.4" como su Agente de usuario.

Método cuatro:
asegúrese de que todos los encabezados de usuario sean válidos, a veces proporciono tantos encabezados como sea posible para que mi raspador parezca un usuario auténtico, algunos de ellos ni siquiera son verdaderos o válidos como en-FU :).
Aquí hay una lista de algunos de los encabezados que proporciono comúnmente.

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"
}

2

En lugar de poner en la lista negra a los bots, tal vez deberías incluirlos en la lista blanca. Si no desea eliminar los resultados de búsqueda de los principales motores, puede incluir en la lista blanca sus cadenas de agente de usuario, que generalmente están bien publicitadas. Los bots menos éticos tienden a forjar cadenas de agente de usuario de navegadores web populares. Los mejores motores de búsqueda deberían conducir más del 95% de su tráfico.

Identificar los bots en sí mismos debería ser bastante sencillo, utilizando las técnicas que otros carteles han sugerido.


2

Enfoque rápido para esto sería establecer una trampa de botín / bot.

  1. Haga una página que, si se abre una cierta cantidad de veces o incluso si se abre, recopilará cierta información como la IP y otras cosas (también puede considerar irregularidades o patrones, pero esta página no debería tener que abrirse en absoluto).

  2. Haga un enlace a esto en su página que esté oculto con la pantalla CSS: ninguno; o izquierda: -9999px; positon: absoluto; trate de colocarlo en lugares donde sea menos probable que se ignore, como donde cae su contenido y no en su pie de página, ya que a veces los bots pueden elegir olvidarse de ciertas partes de una página.

  3. En su archivo robots.txt, establezca un montón de reglas de rechazo para páginas en las que no desea que los bots amigables (¡LOL, como si tuvieran caras felices!) Recopilen información y establezcan esta página como una de ellas.

  4. Ahora, si aparece un bot amigable, debería ignorar esa página. Correcto, pero eso todavía no es lo suficientemente bueno. Haga un par más de estas páginas o de alguna manera redirija una página para aceptar nombres diferentes. y luego coloque más reglas de rechazo en estas páginas de trampa en su archivo robots.txt junto a las páginas que desea ignorar.

  5. Recopile la IP de estos bots o de cualquier persona que ingrese a estas páginas, no los prohíba, pero realice una función para mostrar texto noodled en su contenido, como números aleatorios, avisos de derechos de autor, cadenas de texto específicas, mostrar imágenes aterradoras, básicamente cualquier cosa para obstaculizar su buen contenido También puede establecer enlaces que apuntan a una página que tardará una eternidad en cargarse, es decir. en php puedes usar la función sleep (). Esto luchará contra el rastreador si tiene algún tipo de detección para omitir páginas que tardan demasiado en cargarse, ya que algunos bots bien escritos están configurados para procesar X cantidad de enlaces a la vez.

  6. Si ha creado cadenas / frases de texto específicas, ¿por qué no ir a su motor de búsqueda favorito y buscarlas? Es posible que le muestre dónde termina su contenido.

De todos modos, si piensas táctica y creativamente, este podría ser un buen punto de partida. Lo mejor sería aprender cómo funciona un bot.

También pensaría en escalar algunos ID o la forma en que se muestran los atributos en el elemento de la página:

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

eso cambia su forma cada vez, ya que algunos bots pueden estar configurados para buscar patrones específicos en sus páginas o elementos específicos.

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

id="p-12802" > id="p-00392"

1
No solo quieres prohibirlos, quieres joderlos por completo ... ¡ME ENCANTA!
Zoidberg

La prohibición de sigilo es exactamente lo que estaba pensando (también conocido como shadowbanning, prohibición del infierno).
ErikE

1

No puede detener el raspado de pantalla normal. Para bien o para mal, es la naturaleza de la web.

Usted puede hacerlo para que nadie pueda acceder a ciertas cosas (incluyendo archivos de música) a no ser que está conectado como usuario registrado. No es demasiado difícil de hacer en Apache . Supongo que tampoco sería demasiado difícil hacerlo en IIS.


1

Una forma sería servir el contenido como atributos XML, cadenas codificadas en URL, texto preformateado con JSON codificado en HTML o URI de datos, y luego transformarlo a HTML en el cliente. Aquí hay algunos sitios que hacen esto:

  • 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>
  • Noticias de Bing : URL de datos

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

    unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
  • TiddlyWiki : Entidades HTML + JSON preformateado

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

    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 : XML de espacio de nombres + tipo MIME personalizado + extensión de archivo personalizado

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

Si ve la fuente en cualquiera de los anteriores, verá que el raspado simplemente devolverá metadatos y navegación.


Entonces ... ese enfoque hace que el raspado sea aún más fácil, ya que el contenido ahora está en un formato uniforme. De hecho, ya no se llamaría scraping : se llama análisis y es realmente muy fácil de hacer mediante programación.
jpaugh

1

La mayoría ya se ha dicho, pero ¿ha considerado la protección CloudFlare? Quiero decir esto:

descripción de la imagen

Probablemente otras compañías también hagan esto, CloudFlare es la única que conozco.

Estoy bastante seguro de que eso complicaría su trabajo. También una vez me prohibieron IP automáticamente durante 4 meses cuando intenté eliminar datos de un sitio protegido por CloudFlare debido al límite de velocidad (utilicé el bucle de solicitud AJAX simple).


1

Estoy de acuerdo con la mayoría de las publicaciones anteriores, y me gustaría agregar que cuanto más amigable sea el motor de búsqueda de su sitio, más fácil será de raspar. Podrías intentar hacer un par de cosas que están muy por ahí y que hacen que sea más difícil para los raspadores, pero también pueden afectar tu capacidad de búsqueda ... Depende de qué tan bien quieras que tu sitio se clasifique en los motores de búsqueda, por supuesto.


0

Poner su contenido detrás de un captcha significaría que a los robots les resultaría difícil acceder a su contenido. Sin embargo, los humanos tendrían inconvenientes, por lo que puede ser indeseable.


0

Si desea ver un gran ejemplo, visite http://www.bkstr.com/ . Usan el algoritmo aj / s para configurar una cookie, luego vuelven a cargar la página para que pueda usar la cookie para validar que la solicitud se está ejecutando dentro de un navegador. Una aplicación de escritorio creada para raspar definitivamente podría pasar por esto, pero detendría la mayoría del raspado de tipo cURL.


0

Los raspadores de pantalla funcionan procesando HTML. Y si están decididos a obtener sus datos, no hay mucho que pueda hacer técnicamente porque el globo ocular humano procesa cualquier cosa. Legalmente ya se ha señalado que puede tener algún recurso y esa sería mi recomendación.

Sin embargo, puede ocultar la parte crítica de sus datos utilizando una lógica de presentación no basada en HTML

  • Genere un archivo Flash para cada artista / álbum, etc.
  • Genera una imagen para el contenido de cada artista. Tal vez solo una imagen para el nombre del artista, etc. sería suficiente. Haga esto al representar el texto en un archivo JPEG / PNG en el servidor y vincularlo a esa imagen.

Tenga en cuenta que esto probablemente afectaría sus clasificaciones de búsqueda.


0

Genere el HTML, CSS y JavaScript. Es más fácil escribir generadores que analizadores, por lo que podría generar cada página servida de manera diferente. Ya no puede usar un caché o contenido estático.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.