Anonim

Dirijo un sitio web para un cliente donde muestran una gran base de datos de información que han recopilado de manera precisa y lenta a lo largo de los años. Están encontrando sus datos en la web en varios lugares. Lo más probable es que se deba a un raspador que recorre su sitio página por página y extrae la información que necesitan en una base de datos propia. Y en caso de que se lo pregunte, saben que son sus datos debido a una sola pieza de datos plantados en cada categoría en su sitio.

He investigado mucho sobre esto en los últimos días, y puedo decirte que no hay una solución perfecta. Sin embargo, he encontrado varias cosas que hacer para que esto sea un poco más difícil para ellos. Esto es lo que implementé para el cliente.

Datos paginados ajaxificados

Si tiene muchos datos paginados, y está paginando sus datos simplemente agregando un número diferente al final de su URL, es decir, http://www.domain.com/category/programming/2 - Entonces está haciendo El trabajo del rastreador es mucho más fácil. El primer problema es que está en un patrón fácilmente identificable, por lo que soltar un raspador en estas páginas es fácil. Segundo problema, independientemente de la URL de las páginas siguientes en la categoría, es muy probable que haya un enlace siguiente y anterior para que puedan conectarse.

Al cargar los datos paginados a través de JavaScript sin una recarga de página, esto complica significativamente el trabajo para muchos raspadores. Google solo recientemente comenzó a analizar JavaScript en la página. Hay pocas desventajas para recargar los datos de esta manera. Proporciona unas pocas páginas menos para que Google las indexe, pero, técnicamente, los datos paginados deberían apuntar a la página de la categoría raíz a través de la canonicalización de todos modos. Ajusta tus páginas paginadas de datos.

Aleatorizar salida de plantilla

Los raspadores a menudo se personalizarán ligeramente para sus datos específicamente. Se engancharán a un determinado identificador o clase de div para el título, la tercera celda en cada fila para su descripción, etc. Existe un patrón fácilmente identificable para que la mayoría de los raspadores trabajen con la mayoría de los datos que provienen de la misma tabla, se muestra con la misma plantilla. Aleatorice sus identificadores div y nombres de clase, inserte columnas de tabla en blanco al azar con un ancho de 0. Muestre sus datos en una tabla en una página, en divs con estilo y una combinación en otra plantilla. Al presentar sus datos de manera predecible, se pueden extraer de forma predecible y precisa.

Tarro de miel

Esto es bastante ordenado en su simplicidad. Me he encontrado con este método en varias páginas sobre cómo evitar el raspado del sitio.

  • Cree un nuevo archivo en su servidor llamado gotcha.html.
  • En su archivo robots.txt, agregue lo siguiente:
    Agente de usuario: *
    No permitir: /gotcha.html

    Esto le dice a todos los robots y arañas que indexan su sitio que no indexen el archivo gotcha.html. Cualquier rastreador web normal respetará los deseos de su archivo robots.txt y no accederá a ese archivo. es decir, Google y Bing. Es posible que desee implementar este paso y esperar 24 horas antes de pasar al siguiente. Esto asegurará que un rastreador no sea bloqueado accidentalmente por usted debido al hecho de que ya estaba a mitad de rastreo cuando actualizó su archivo robots.txt.
  • Coloque un enlace a gotcha.html en algún lugar de su sitio web. No importa donde. Sin embargo, recomendaría en el pie de página, asegúrese de que este enlace no sea visible, en CSS, display: none;
  • Ahora, registre la IP / información general de la persona que visitó esta página y bloquéela. Alternativamente, puede crear un script para proporcionarles datos incorrectos y basura. O tal vez un buen mensaje personal de usted para ellos.

Los espectadores web habituales no podrán ver el enlace, por lo que no se hará clic accidentalmente. Los rastreadores de buena reputación (Google, por ejemplo) respetarán los deseos de su archivo robots.txt y no visitarán el archivo. Por lo tanto, las únicas computadoras que deberían tropezar con esta página son aquellas con intenciones maliciosas, o alguien que vea su código fuente y haga clic al azar (y bueno, si eso sucede).

Hay un par de razones por las que esto no siempre funciona. Primero, muchos raspadores no funcionan como rastreadores web normales, y no solo descubren los datos siguiendo cada enlace desde cada página de su sitio. Los raspadores a menudo se crean para fijar en ciertas páginas y seguir solo ciertas estructuras. Por ejemplo, se puede iniciar un raspador en una página de categoría y luego se le dice que solo visite las URL con la palabra / datos en la ficha. En segundo lugar, si alguien está ejecutando su scraper en la misma red que otros, y se está utilizando una IP compartida, tendrá que prohibir toda la red. Tendría que tener un sitio web muy popular para que esto sea un problema.

Escribir datos en imágenes sobre la marcha

Encuentre un campo de datos más pequeño, no necesariamente largas cadenas de texto, ya que esto puede dificultar un poco el diseño de la página. Al emitir estos datos dentro de una imagen, estoy bastante seguro de que existen métodos en casi todos los lenguajes de programación para escribir texto en una imagen dinámicamente (en php, imagettftext). Esto es probablemente más efectivo con valores numéricos ya que los números proporcionan una ventaja SEO mucho más insignificante.

Alternativa

Esta no era una opción para este proyecto. Requerir un inicio de sesión después de una cierta cantidad de visitas a la página, o mostrar una cantidad limitada de datos sin haber iniciado sesión. Es decir, si tiene 10 columnas, solo muestre 5 a los usuarios que no hayan iniciado sesión.

No cometas este error

No se moleste en tratar de encontrar algún tipo de solución basada en el agente de usuario del bot. Esta información puede ser fácilmente suplantada por un raspador que sabe lo que está haciendo. El robot de Google, por ejemplo, se puede emular fácilmente. Es muy probable que no quieras prohibir Google.

Prevenir el raspado del sitio