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?
Respuestas:
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:
¿Cómo identificar de forma exclusiva a los usuarios con la misma dirección IP externa? para más detalles y
¿Por qué las personas usan prohibiciones de direcciones IP cuando las direcciones IP cambian a menudo? para obtener información sobre los límites de estos métodos.
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.
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:
[email protected]
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:
example.com/article.php?articleId=12345
. Esto (y cosas similares) que permitirán a los raspadores simplemente iterar sobre todos los correos electrónicosarticleId
y solicitar todos los artículos de esa manera.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 dearticle-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 delarticle-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 unadiv
que viene después de unah1
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 sodiv
s adicionalesspan
. 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: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:
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:
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:
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:
Artículo de Wikipedia sobre raspado web . Muchos detalles sobre las tecnologías involucradas y los diferentes tipos de web scraper.
Evitar que los scripters cierren su sitio web cientos de veces por segundo . Preguntas y respuestas sobre un problema muy similar: los bots 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.
fuente
A real browser will (almost always) request and download assets such as images and CSS
Tambié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-proofness
También equilibre el tiempo de programación / complejidad vs. beneficio financiero.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:
/jail.html
,.robots.txt
(por lo que las arañas respetuosas nunca visitarán).display: none
)./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.html
un 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.fuente
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.
fuente
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.
fuente
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. ;)
fuente
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.
fuente
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.
fuente
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:
Intentar usar algunas barreras técnicas no vale la pena, porque:
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
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:
Tal raspado es lento (el raspado se realiza como en el navegador normal), pero es
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,
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 ...
fuente
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.
fuente
Cosas que podrían funcionar contra los raspadores para principiantes:
Cosas que ayudarán en general:
Cosas que ayudarán pero harán que tus usuarios te odien:
fuente
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.
fuente
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.
fuente
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.
fuente
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:
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.
fuente
Probablemente no sea la respuesta que desea, pero ¿por qué ocultar lo que intenta hacer público?
fuente
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? ):
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.
fuente
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.
fuente
Enfoque rápido para esto sería establecer una trampa de botín / bot.
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).
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.
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.
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.
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.
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:
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.
fuente
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.
fuente
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
Chrome Web Store : JSON
Noticias de Bing : URL de datos
Protopage : cadenas codificadas URL
TiddlyWiki : Entidades HTML + JSON preformateado
Amazon : carga perezosa
XMLCalabash : XML de espacio de nombres + tipo MIME personalizado + extensión de archivo personalizado
Si ve la fuente en cualquiera de los anteriores, verá que el raspado simplemente devolverá metadatos y navegación.
fuente
La mayoría ya se ha dicho, pero ¿ha considerado la protección CloudFlare? Quiero decir esto:
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).
fuente
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.
fuente
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.
fuente
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.
fuente
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
Tenga en cuenta que esto probablemente afectaría sus clasificaciones de búsqueda.
fuente
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.
fuente