Web Scraping sin ser bloqueado

Web Scraping se refiere al proceso de raspado/extracción de datos de un sitio web utilizando el protocolo HTTP o el navegador web. El proceso puede ser manual o puede automatizarse usando un bot o un rastreador web. Además, existe la idea errónea de que el web scraping es ilegal, la verdad es que es perfectamente legal a menos que intente acceder a datos no públicos (datos a los que el público no puede acceder, como las credenciales de inicio de sesión).

Cuando raspa a través de sitios web pequeños, es posible que no tenga ningún problema. Pero cuando intenta el web scraping en algunos sitios web grandes o incluso en Google, es posible que sus requests sean ignoradas o incluso que su IP sea bloqueada.

En este artículo, le sugeriremos algunas de las mejores prácticas que se pueden seguir al extraer datos de la web sin que usted (su IP) sea bloqueado.

Método 1: uso de proxies rotativos

Si envía requests repetitivas desde la misma IP, los propietarios del sitio web pueden detectar su huella y pueden bloquear sus raspadores web al verificar los archivos de registro del servidor. Para evitar esto, puede utilizar proxies rotativos.

Un proxy rotativo es un servidor proxy que asigna una nueva dirección IP de un conjunto de servidores proxy almacenados en el grupo de servidores proxy. Necesitamos usar proxies y rotar nuestras direcciones IP para evitar ser detectados por los propietarios del sitio web. Todo lo que tenemos que hacer es escribir un script que nos permita usar cualquier dirección IP del grupo y solicitar que usemos esa misma IP. El propósito detrás del uso del concepto de rotación de IP es hacer que parezca que no eres un bot sino un humano, accediendo a datos desde diferentes ubicaciones desde diferentes partes del mundo.

El primer paso consiste en encontrar un proxy: hay muchos sitios web que ofrecen proxies gratuitos a través de Internet. Uno de ellos es  https://free-proxy-list.net/

Proxy utilizado aquí:

  • IP: 180.179.98.22
  • Puerto: 3128

Del mismo modo, podemos obtener una lista de proxies de  https://free-proxy-list.net/ ya sea manualmente o automatizando el proceso usando un raspador.

Programa:

Python

import requests
 
# use to parse html text
from lxml.html import fromstring 
from itertools import cycle
import traceback
 
 
def to_get_proxies():
    # website to get free proxies
    url = 'https://free-proxy-list.net/' 
 
    response = requests.get(url)
 
    parser = fromstring(response.text)
    # using a set to avoid duplicate IP entries.
    proxies = set() 
 
    for i in parser.xpath('//tbody/tr')[:10]:
 
        # to check if the corresponding IP is of type HTTPS
        if i.xpath('.//td[7][contains(text(),"yes")]'):
 
            # Grabbing IP and corresponding PORT
            proxy = ":".join([i.xpath('.//td[1]/text()')[0],
                              i.xpath('.//td[2]/text()')[0]])
 
            proxies.add(proxy)
        return proxies

Producción:

proxies={‘160.16.77.108:3128’, ‘20.195.17.90:3128’, ‘14.225.5.68:80’, ‘158.46.127.222:52574’, ‘159.192.130.233:8080’, ‘124.106:824.’ , ‘51.79.157.202:443’, ‘161.202.226.194:80’}

Ahora tenemos la lista de direcciones IP de proxy disponibles en un conjunto. Rotaremos la IP usando el método round-robin.

Programa:

Python

proxies = to_get_proxies()
 
# to rotate through the list of IPs
proxyPool = cycle(proxies) 
 
# insert the url of the website you want to scrape.
url = '' 
 
for i in range(1, 11):
 
    # Get a proxy from the pool
    proxy = next(proxyPool)
    print("Request #%d" % i)
 
    try:
        response = requests.get(url, proxies={"http": proxy, "https": proxy})
        print(response.json())
 
    except:
       
        # One has to try the entire process as most
        # free proxies will get connection errors
        # We will just skip retries.
    print("Skipping.  Connection error")

Producción:

Request #1
Skipping.  Connection error
Request #2
Skipping.  Connection error
Request #3
Skipping.  Connection error
Request #4
Skipping.  Connection error
Request #5
Skipping.  Connection error
Request #6
Skipping.  Connection error
Request #7
Skipping.  Connection error
Request #8
Skipping.  Connection error
Request #9
Skipping.  Connection error
Request #10
Skipping.  Connection error

Cosas a tener en cuenta al usar la rotación de proxy: 

  • Evite usar una dirección IP de proxy que esté en alguna secuencia :

Cualquier complemento anti-raspado detectará un raspador si las requests provienen de una subred similar o están en sucesión continua. Por ejemplo: 132.12.12.1, 132.12.12.2, 132.12.12.3, 132.12.12.4 están en la misma secuencia. Debe evitar el uso de IP como estas, ya que la mayoría de los complementos anti-raspado están diseñados para bloquear las IP que se encuentran en algún rango o en una secuencia particular.

  • Usa proxies pagados:

Los proxies gratuitos tienden a desaparecer pronto. Además, los proxies gratuitos se usan demasiado en Internet y ya están en la lista negra de la mayoría de las herramientas anti-scraping. Además, puede automatizar el proceso si está utilizando proxies gratuitos para evitar la interrupción del proceso de raspado. 

Método 2: Usar direcciones IP de Google Cloud Platform

Puede ser útil usar Google Cloud Functions como plataforma de alojamiento para su web scraper combinado con cambiar el agente de usuario a GoogleBot. Aparecerá en el sitio web que eres un GoogleBot y no un raspador. GoogleBot es un rastreador web diseñado por Google que visita sitios cada pocos segundos y recopila documentos del sitio para crear un índice de búsqueda para el motor de búsqueda de Google. Como la mayoría de los sitios web no bloquean GoogleBot, existen mayores posibilidades de que su rastreador no se bloquee si utiliza las funciones de Google Cloud como plataforma de alojamiento. 

Método 3: Web Scrape lentamente

Cuando raspamos datos usando un raspador automatizado, el raspador raspa los datos a una velocidad inhumana que es fácilmente detectada por complementos anti-raspadores. Al agregar demoras y acciones aleatorias a nuestro raspador, podemos hacer que se parezca a un humano, para que los propietarios del sitio web no lo detecten. Enviar requests demasiado rápido puede bloquear el sitio web para todos los usuarios. Mantenga el número de requests por debajo de un límite para que no sobrecargue el servidor del sitio web y bloquee su IP.

Además, puede verificar cuál debería ser el retraso entre dos requests utilizando el archivo robot.txt de un sitio. A menudo, puede encontrar un campo de retraso de rastreo en la página robot.txt que indica exactamente cuál debe ser un retraso entre las requests para evitar ser reconocido como un rastreador. 

Método 4: Web Scrape a diferentes horas del día

Iniciar sesión en el mismo sitio web en diferentes momentos del día también reduce su huella. Por ejemplo: si comienza a raspar a las 8:00 a. m. todos los días, entonces comience a raspar a las 8:20 u 8:25 a. m. durante los próximos días. Agregar unos minutos en su hora de inicio cada día puede resultar tremendamente útil para escapar del algoritmo de detección del rastreador.

 Método 5: use un servicio de resolución de CAPTCHA

La mayoría de los sitios web usan CAPTCHA para detectar el tráfico de bots. Podemos usar un servicio de resolución de CAPTCHA para eludir fácilmente esta capa adicional de seguridad. Hay algunos servicios de resolución de CAPTCHA como: 

  • Anticaptcha.
  • MuertePorCaptcha

El punto a recordar es que estos servicios cuestan más y pueden aumentar el tiempo para extraer datos de los sitios web. Por lo tanto, se debe considerar el tiempo y los gastos adicionales que puede tener que asumir si elige utilizar un Servicio de resolución de CAPTCHA.

 Método 6: raspado de Google Cache:  

Para extraer datos de aquellos sitios web cuyos datos cambian con poca frecuencia, podemos usar el caché de Google. Google guarda una copia en caché de algunos sitios web. En lugar de realizar una solicitud al original, puede realizar una solicitud a sus datos almacenados en caché. Para acceder al caché en cualquier página web, agregue la URL del sitio web delante de esta URL

Sintaxis:

http://webcache.googleusercontent.com/search?q=cache:URL(URL del sitio web que desea raspar). 

Método 7: Agente de usuario

Es una string de caracteres que permite a los servidores y pares identificar la aplicación o la versión del sistema operativo del usuario solicitante. Algunos sitios bloquean los agentes de usuario si no es de un navegador importante. Si no están configurados, muchos sitios web no permitirán acceder al contenido. Puede encontrar su agente de usuario de dos maneras:

  • Escribir: «¿Cuál es mi agente de usuario en Google?»
  • Puede encontrar la string del agente de usuario en este sitio web: http://www.whatsmyuseragent.com/ .

La solución a este problema es que debe crear una lista de agentes de usuario o usar bibliotecas como fake-useragent (python). 

Método 8: Navegador sin cabeza

Los sitios web cambian su contenido según el navegador del que solicita los datos. El problema al raspar algunos sitios web es que el contenido se procesa mediante el código JavaScript (mientras se raspa) y no HTML. Para raspar dichos sitios web, es posible que deba implementar su propio navegador sin cabeza personalizado. Los navegadores de automatización como Selenium y Puppeteer también se pueden usar para controlar y rastrear sitios web tan dinámicos. Es mucho esfuerzo, pero esta es la forma más eficiente.

Publicación traducida automáticamente

Artículo escrito por tarunbambani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *