¿Cómo evito el raspado de sitios? [cerrado]

Resuelto pixel asked hace 14 años • 0 respuestas

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 recopilan los datos de nuestro sitio (ingreso nombres ficticios de artistas aquí y allá y luego los busco en Google).

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

pixel avatar Jul 02 '10 03:07 pixel
Aceptado

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


Para dificultar el scraping (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 scrapers y, por extensión, qué les impide funcionar bien.

Hay varios tipos de raspador y cada uno funciona de manera diferente:

  • Arañas, como el bot de Google o copiadores de sitios web como HTtrack , que siguen enlaces a otras páginas de forma recursiva para obtener datos. A veces se utilizan para el scraping dirigido a 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 raspar: Wget o Curl para descargar páginas y Grep (Regex) para extraer los datos.

  • Analizadores HTML, como los basados ​​en Jsoup, Scrapy y otros. Al igual que los basados ​​en expresiones regulares de script de shell, estos funcionan extrayendo datos de páginas basándose en patrones en HTML, generalmente ignorando todo lo demás.

    Por ejemplo: si su sitio web tiene una función de búsqueda, dicho raspador podría 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 los enlaces de resultados de búsqueda y sus títulos. . Estos son los mas comunes.

  • Screenscrapers, basados ​​en, por ejemplo. 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 que se haya cargado la página y se haya ejecutado 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 descifrar analizadores/scrapers 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 raspadores dedicados que realmente quieren sus datos los configurarán.

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

    Como era de esperar, los servicios de scraping profesionales son los más difíciles de disuadir, pero si hace que sea difícil y requiere mucho tiempo descubrir cómo scrapear su sitio, es posible que estos (y las personas que les pagan por hacerlo) no se molesten en scrapear su sitio web.

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

    Aunque técnicamente no son scraping, las aplicaciones móviles (Android e iOS) pueden incrustar sitios web e inyectar CSS y JavaScript personalizados, cambiando así por completo la apariencia de sus páginas.

  • Copiar y pegar por humanos: las personas copiarán y pegarán su contenido para usarlo en otro lugar.

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

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

Cómo dejar de raspar

No puedes evitarlo por completo , ya que hagas lo que hagas, los raspadores decididos aún pueden descubrir cómo raspar. Sin embargo, puedes evitar muchos scraping haciendo algunas cosas:

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

Revise sus registros con regularidad y, en caso de actividad inusual que indique un acceso automatizado (scrapers), como muchas acciones similares desde la misma dirección IP, puede bloquear o limitar el acceso.

En concreto, algunas ideas:

  • Limitación de velocidad:

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

  • Detectar actividad inusual:

    Si ve actividad inusual, como muchas solicitudes similares desde una dirección IP específica, alguien mirando una cantidad excesiva de páginas o realizando una cantidad inusual de búsquedas, puede impedir el acceso o mostrar un captcha para solicitudes posteriores.

  • No se limite a monitorear y calificar el límite por dirección IP; use también otros indicadores:

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

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

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

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

    Como ejemplo, si recibe muchas solicitudes de una sola dirección IP, todas usando el mismo agente de usuario, tamaño de pantalla (determinado con JavaScript) y el usuario (scraper en este caso) 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 tamaño de pantalla provenientes de esa dirección IP en particular), y de esta manera no molestará a los usuarios reales en esa dirección IP, por ejemplo. en caso de una conexión a Internet compartida.

    También puede ir más allá, ya que puede identificar solicitudes similares, incluso si provienen de diferentes direcciones IP, lo que indica un scraping distribuido (un scraper que utiliza una botnet o una red de proxies). Si recibe muchas solicitudes idénticas, pero provienen de direcciones IP diferentes, puede bloquearlas. Nuevamente, tenga cuidado de no bloquear inadvertidamente a usuarios reales.

    Esto puede ser eficaz contra los screenscrapers que ejecutan JavaScript, ya que puedes obtener mucha información de ellos.

    Preguntas relacionadas sobre Security Stack Exchange:

    • ¿Cómo identificar de forma única a los usuarios con la misma dirección IP externa? para más detalles, y

    • ¿Por qué la gente utiliza prohibiciones de direcciones IP cuando las direcciones IP cambian con frecuencia? para obtener información sobre los límites de estos métodos.

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

    La forma más sencilla 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.

Requerir registro e inicio de sesión

Requerir la creación de una cuenta para ver su contenido, si esto es factible para su sitio. Este es un buen elemento disuasivo para los raspadores, pero también es un buen elemento disuasivo 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, puedes detectar fácilmente cuándo se está utilizando una cuenta específica para realizar scraping y prohibirla. Cosas como limitar la velocidad o detectar abusos (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, usted debe:

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

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

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

Bloquear el acceso desde las direcciones IP del servicio de alojamiento en la nube y scraping

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 las solicitudes que se originen en las direcciones IP utilizadas por dichos servicios de alojamiento en la nube.

De manera similar, también puede limitar el acceso desde las direcciones IP utilizadas por 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 desde 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 reparar su raspador. Entonces una mala idea sería mostrar páginas de error con texto como:

  • Demasiadas solicitudes de su dirección IP. Vuelva a intentarlo más tarde.

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

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

  • Perdón, algo salió mal. Puede ponerse en contacto con el soporte a través de [email protected], si el problema persiste.

Esto también es mucho más fácil de usar para los usuarios reales, en caso de que alguna vez vean una página de error de este tipo. También debería 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 no bloquearlo y así provocar que usuarios legítimos se comuniquen con usted.

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

Los captchas ("Prueba completamente automatizada para distinguir entre computadoras y humanos") son muy efectivos para detener a los raspadores. Desafortunadamente, también son muy eficaces para irritar a los usuarios.

Como tales, 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 raspador sino un usuario real. Es posible que desees considerar mostrar un captcha antes de permitir el acceso al contenido si sospechas que se trata de un scraper.

Cosas a tener en cuenta al utilizar Captchas:

  • No haga el suyo propio, 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 alguna solución de texto borroso y deformado que pueda crear usted mismo (los usuarios a menudo solo necesitan marcar una casilla ), y también es mucho más difícil de resolver para un creador de scripts que una simple imagen servida desde su sitio.

  • No incluya la solución al captcha en el marcado HTML: de hecho, vi un sitio web que tenía la solución para el captcha en la propia página (aunque bastante bien oculta), lo que la hacía bastante inútil. No hagas algo como esto. Nuevamente, use un servicio como reCaptcha y no tendrá este tipo de problemas (si lo usa correctamente).

  • Los captchas se pueden resolver de forma masiva: existen servicios de resolución de captchas en los que humanos reales y mal pagados resuelven captchas de forma masiva. 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 utilice este tipo de servicio a menos que sus datos sean realmente valiosos.

Sirve tu contenido de texto como una imagen.

Puede representar texto en una imagen del lado del servidor y servirlo para mostrarlo, lo que dificultará que los raspadores simples extraigan texto.

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 algo de OCR, así que no lo hagas.

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

No exponga su conjunto de datos completo:

Si es posible, no proporcione una forma para que un script/bot obtenga todo su conjunto de datos. Por ejemplo: tiene un sitio de noticias con muchos artículos individuales. Puede hacer que solo se pueda acceder a esos artículos 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 ningún lugar, solo se podrá acceder a esos artículos mediante la búsqueda. característica. Esto significa que un script que quiera sacar todos los artículos de su sitio tendrá que realizar búsquedas de todas las frases posibles que puedan aparecer en sus artículos para poder encontrarlas todas, lo que consumirá mucho tiempo, será terriblemente ineficaz y, con suerte, facilitará la tarea. 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 publican desde una URL similar a example.com/article.php?articleId=12345. Esto (y cosas similares) permitirá a los raspadores simplemente iterar sobre todos los articleIdmensajes de correo electrónico y solicitar todos los artículos de esa manera.
  • Hay otras formas de encontrar eventualmente todos los artículos, como escribir un guión para seguir 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. (Puedes evitar esto si solo devuelves los 10 o 20 mejores resultados).
  • Necesitas motores de búsqueda para encontrar tu contenido.

No exponga sus API, puntos finales y cosas similares:

Asegúrese de no exponer ninguna API, ni siquiera 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 raspador. Asegúrese de ofuscar sus puntos finales y dificultar su uso para otros, como se describe.

Para disuadir a los analizadores y raspadores de HTML:

Dado que los analizadores HTML funcionan extrayendo contenido de páginas basándose en patrones identificables en el HTML, podemos cambiar intencionalmente esos patrones para romper estos raspadores, o incluso arruinarlos. La mayoría de estos consejos también se aplican a otros raspadores 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 una dividentificación 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 de artículo, y listo, el raspador tiene todos los artículos de su sitio en un formato que se puede reutilizar en otro lugar.

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

  • Con frecuencia puedes cambiar los ID y las clases de elementos en tu HTML, tal vez incluso automáticamente. Entonces, si se div.article-contentvuelve algo así como div.a4c36dda13eaf0y cambia cada semana, el raspador funcionará bien inicialmente, pero se romperá después de una semana. Asegúrese de cambiar también la longitud de sus identificadores/clases; de lo contrario, el raspador se utilizará div.[any-14-characters]para encontrar el div deseado. Tenga cuidado también con otros agujeros similares.

  • Si no hay forma de encontrar el contenido deseado a partir del marcado, el raspador lo hará a partir de la forma en que está estructurado el HTML. Entonces, si todas las páginas de su artículo son similares en el sentido de que cada divdentro de a divque viene después de a h1es el contenido del artículo, los scrapers obtendrán el contenido del artículo en función de eso. Nuevamente, para solucionar esto, puede agregar/eliminar marcas adicionales a su HTML, de forma periódica y aleatoria, por ejemplo. agregando divs o spans adicionales. 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.

  • Dificultarás el almacenamiento en caché. Especialmente si cambia los identificadores o las 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 prolongados para los visitantes habituales y una mayor carga del servidor. Si sólo lo cambias una vez por semana no será un gran problema.

  • Los raspadores inteligentes aún podrán obtener su contenido infiriendo dónde está el contenido real, por ejemplo. sabiendo que un gran bloque de texto en la página probablemente sea el artículo real. Esto hace posible seguir buscando y extrayendo los datos deseados de la página. Boilerpipe hace exactamente esto.

Básicamente, asegúrese de que no sea fácil para un script encontrar el contenido real deseado 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.

Cambie su HTML según la ubicación del usuario

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

¡Cambie con frecuencia su HTML y joda activamente los scrapers 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, esto es fácil de eliminar: todo lo que un raspador debe hacer es acceder a 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 describe anteriormente, también puede dejar el marcado antiguo con los identificadores y clases antiguos, 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 raspadores escritos para extraer datos del HTML basados ​​en clases o ID aparentemente seguirán funcionando, pero obtendrán datos falsos o incluso anuncios, datos que los usuarios reales nunca verán, ya que están ocultos con CSS.

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

Complementando el ejemplo anterior, puedes agregar elementos de honeypot invisibles a tu HTML para atrapar scrapers. 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 lo recogerá, como cualquier otro resultado de búsqueda real en la página, y visitará el enlace en busca del contenido deseado. En primer lugar, un humano real ni siquiera lo verá (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 archivo robots.txt.

Puede hacer scrapertrap.phpalgo como bloquear el acceso a la dirección IP que lo visitó o forzar un captcha para todas las solicitudes posteriores desde esa IP.

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

  • Puedes/debes combinar esto con el consejo anterior de cambiar tu HTML con frecuencia.

  • Cambie esto también con frecuencia, ya que los raspadores eventualmente aprenderán a evitarlo. Cambie la URL y el texto del honeypot. También quiero considerar cambiar el CSS en línea usado para ocultar y usar un atributo de ID y CSS externo en su lugar, ya que los raspadores aprenderán a evitar cualquier cosa que tenga un styleatributo con CSS usado para ocultar el contenido. También intente habilitarlo solo algunas 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 impedir 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.

Entrega datos falsos e inútiles si detectas un raspador

Si detecta lo que obviamente es un raspador, puede generar 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 los están jodiendo.

Por ejemplo: tienes un sitio web de noticias; Si detecta un raspador, en lugar de bloquear el acceso, proporcione 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 quieren, es decir, los datos reales.

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

A menudo, los scrapers escritos de forma perezosa no enviarán un encabezado de agente de usuario con su solicitud, mientras que todos los navegadores y los motores de búsqueda sí lo harán.

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

Es trivial falsificar, pero como medida contra los scrapers mal escritos vale la pena implementarlo.

No acepte solicitudes si el agente de usuario es un raspador común; los de la lista negra utilizados por los raspadores

En algunos casos, los raspadores utilizarán un agente de usuario que ningún navegador real o motor de búsqueda utiliza, como por ejemplo:

  • "Mozilla" (Sólo eso, nada más. He visto algunas preguntas sobre el scraping aquí y su uso. Un navegador real nunca usará solo eso)
  • "Java 1.7.43_u43" (De forma predeterminada, HttpUrlConnection de Java usa algo como esto).
  • "BIZCO EasyScraping Estudio 2.0"
  • "wget", "curl", "libcurl",... (Wget y cURL a veces se usan para raspado básico)

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

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

Un navegador real (casi siempre) solicitará y descargará recursos como imágenes y CSS. Los analizadores y raspadores de 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 es posible que los robots de motores de búsqueda, los dispositivos móviles antiguos, los lectores de pantalla y los dispositivos mal configurados tampoco soliciten activos.

Usar y requerir cookies; Úselos para rastrear las acciones del usuario y del raspador.

Puede solicitar que se habiliten las cookies para poder ver su sitio web. Esto disuadirá a los escritores de scrapers novatos y sin experiencia, sin embargo, es fácil que un scraper envíe cookies. Si los usa y los necesita, puede rastrear las acciones del usuario y del raspador con ellos y así implementar la limitación de velocidad, el bloqueo o la visualización de captchas por usuario en lugar de por IP.

Por ejemplo: cuando el usuario realiza una búsqueda, establecer 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 la búsqueda (se puede saber por la cookie), entonces probablemente sea un raspador.

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

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

Utilice 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 suele ser un elemento disuasorio eficaz para los programadores novatos e inexpertos que escriben scrapers.

Ser consciente de:

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

  • Es posible que los motores de búsqueda tampoco ejecuten JavaScript, lo que les impide indexar su contenido. Es posible que esto no sea un problema para las páginas de resultados de búsqueda, pero puede serlo para otras cosas, como las páginas de artículos.

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

Si utiliza 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 recuperarlos a través de Ajax. Esto significará que alguien que inspeccione el tráfico de la red no verá inmediatamente cómo funciona su página y carga datos, y será más difícil para alguien solicitar datos directamente desde sus puntos finales, ya que tendrá que aplicar ingeniería inversa a su algoritmo de descodificación.

  • Si usa Ajax para cargar los datos, debería dificultar el uso de los puntos finales sin cargar la página primero, por ejemplo, solicitando 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 desofuscarlos y mostrarlos, lo que evitaría solicitudes de red adicionales. Hacer esto hará que sea mucho más difícil extraer los datos usando un analizador solo HTML que no ejecuta JavaScript, ya que quien escribe el raspador tendrá que aplicar ingeniería inversa a su JavaScript (que también debe ofuscar).

  • Es posible que desees cambiar tus métodos de ofuscación con regularidad, para romper con los raspadores que lo han descubierto.

Sin embargo, existen varias desventajas al hacer algo como esto:

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

  • Será ineficaz contra raspadores y 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 se verán afectados.

No técnico:

  • Dígale a la gente que no se rasque y algunos lo respetarán.

  • encontrar un abogado

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

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

Misceláneas:

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

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

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

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

Otras lecturas:

  • Artículo de Wikipedia sobre web scraping . Muchos detalles sobre las tecnologías involucradas y los diferentes tipos de web scraper.

  • Evitar que los scripters ataquen su sitio web cientos de veces por segundo . Preguntas y respuestas sobre un problema muy similar: los robots revisan un sitio web y compran cosas tan pronto como salen a la venta. Mucha información relevante, especialmente. sobre Captchas y limitación de velocidad.

Jonas Czech avatar Jan 16 '2016 15:01 Jonas Czech

Supongo que lo has configurado robots.txt.

Como otros han mencionado, los scrapers 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(para que las arañas respetuosas nunca la visiten).
  3. Coloque un enlace en una de sus páginas, ocultándolo con CSS ( display: none).
  4. Registre las direcciones IP de los visitantes de /jail.html.

Esto podría ayudarle a identificar rápidamente las solicitudes de los scrapers que ignoran flagrantemente su robots.txt.

También es posible que desee crear /jail.htmlun sitio web completo que tenga el mismo marcado exacto que las páginas normales, pero con datos falsos ( /jail/album/63ajdka,, /jail/track/3aads8etc.). De esta manera, los raspadores defectuosos no serán alertados sobre "entradas inusuales" hasta que tengas la oportunidad de bloquearlos por completo.

Daniel Trebbien avatar Jul 01 '2010 21:07 Daniel Trebbien

Demandarlos.

En serio: si tiene algo de dinero, hable con un buen, agradable y joven abogado que conozca Internet. Realmente podrías poder hacer algo aquí. Dependiendo de dónde se encuentren los sitios, podría pedirle a un abogado que redacte un cese y desistimiento o su equivalente en su país. Tal vez puedas al menos asustar a esos bastardos.

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

Sería una lástima que esto le llevara a estropear su código HTML, perjudicando el SEO, la validez y otras cosas (aunque un sistema de plantillas que utilice una estructura HTML ligeramente diferente en cada solicitud de páginas idénticas ya podría ayudar mucho contra raspadores que siempre dependen de estructuras HTML y nombres de clase/ID para sacar el contenido).

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

Unicron avatar Jul 01 '2010 22:07 Unicron

Realmente no hay nada que puedas hacer para evitarlo por completo. Los scrapers 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 atacando por completo su sitio y revisando todas sus páginas, podría aplicar algún tipo de limitación de velocidad.

Aunque hay algo de esperanza. Los scrapers dependen de 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 el ID o los nombres de clase de los elementos de la página en cada carga, etc. Pero eso es mucho trabajo por hacer y no estoy seguro de si vale la pena. E incluso entonces, probablemente podrían solucionarlo con suficiente dedicación.

ryeguy avatar Jul 01 '2010 20:07 ryeguy

Proporcionar una API XML para acceder a sus datos; de una manera que sea fácil de usar. Si la gente quiere tus datos, los obtendrán, es mejor que hagas todo lo posible.

De esta manera, puede proporcionar un subconjunto de funcionalidades de manera efectiva, asegurando que, como mínimo, los raspadores no devoren solicitudes HTTP y cantidades masivas de ancho de banda.

Entonces todo lo que tienes que hacer es convencer a las personas que quieren tus datos para que utilicen la API. ;)

Williham Totland avatar Jul 01 '2010 21:07 Williham Totland