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.com
si 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 articleId
y 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 div
un 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-content
div. 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-content
convierte en algo así div.a4c36dda13eaf0
y 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 div
dentro de una div
que viene después de una h1
es 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 div
s 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.php
hacer 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 style
atributo 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: