¿Cómo no quedar atrapado durante el web scraping?

En este artículo, vamos a discutir cómo no quedar atrapado durante el web scraping. Veamos todas estas alternativas en detalle:

Robots.txt

  • Es un archivo de texto creado por el webmaster que le dice a los rastreadores del motor de búsqueda qué páginas pueden rastrear el bot, por lo que es mejor respetar el archivo robots.txt antes de raspar.
  • Ejemplo: Aquí, el archivo robot.txt de GFG tiene «User-agent: *», lo que significa que esta sección se aplica a todos los robots y algunos sitios web no pueden ser rastreados por ningún rastreador web.

Rotación de IP

  • Enviar demasiadas requests desde una sola dirección IP es una clara indicación de que está automatizando las requests HTTP/HTTPS y el webmaster seguramente bloqueará su dirección IP para evitar más raspado.
  • La mejor alternativa es usar proxies y rotarlos después de una cierta cantidad de requests de un solo proxy, esto reduce las posibilidades de bloqueo de IP y el raspador no se ve afectado.
  • Siempre asegúrese de obtener proxies premium, especialmente direcciones IP residenciales, ya que es muy probable que otros usuarios marquen las direcciones IP del centro de datos y es posible que devuelvan errores de conexión.

Tipos de proxy:

  • Proxy del centro de datos: estos proxies son de proveedores de servicios en la nube y, a veces, se marcan porque muchas personas los usan, pero dado que son más baratos, se puede traer un grupo de proxies para actividades de web scraping.
  • Proxy IP residencial: estos proxies contienen la dirección IP del ISP local, por lo que el webmaster no puede detectar si se trata de un raspador o de una persona real que navega por el sitio web. Son muy costosos en comparación con los servidores proxy de centros de datos y pueden generar consentimientos legales, ya que el propietario no sabe si está utilizando su IP para fines de web scraping.
  • Proxy IP móvil: estos proxies son direcciones IP de dispositivos móviles privados y funcionan de manera similar a los proxy IP residenciales. Son muy costosos y pueden generar consentimientos legales, ya que el propietario del dispositivo no sabe si está utilizando su red GSM para el web scraping, ya que los proporcionan los operadores de redes móviles.

Ejemplo: 

  • Cree un grupo de servidores proxy y gírelos o itérelos.
  • Importe el módulo de requests y envíe una solicitud GET a » https://www.geeksforgeeks.org/ » junto con el proxy.

Sintaxis: 

requests.get(url, proxies={“http”: proxy, “https”: proxy})

  • La respuesta recibida después de enviar la solicitud GET es la dirección IP del servidor proxy actual si no hay ningún error de conexión.

Programa:

Python3

# Import the required Modules
import requests
  
# Create a pool of proxies
proxies = {
           'http://114.121.248.251:8080', 
           'http://222.85.190.32:8090',
           'http://47.107.128.69:888', 
           'http://41.65.146.38:8080',
           'http://190.63.184.11:8080',
           'http://45.7.135.34:999',
           'http://141.94.104.25:8080',
           'http://222.74.202.229:8080',
           'http://141.94.106.43:8080',
           'http://191.101.39.96:80'
           }
url = 'https://www.geeksforgeeks.org/'
  
# Iterate the proxies and check if it is working.
for proxy in proxies:
    try:
        # https://ipecho.net/plain returns the ip address
        # of the current session if a GET request is sent.
        page = requests.get(url,
                proxies={"http": proxy, "https": proxy})
          
        # Prints Proxy server IP address if proxy is alive.
        print("Status OK, Output:", page.text)   
    except OSError as e:
          
        # Proxy returns Connection error
        print(e)

Agente de usuario

  • El encabezado de solicitud de User-Agent es una string de caracteres que permite a los servidores y pares de red identificar la aplicación, el sistema operativo, el proveedor y/o la versión del user-agent solicitante.
  • Algunos sitios web requieren un agente de usuario de un navegador principal o, de lo contrario, no permitirán ver el contenido, por lo que la mejor manera es crear una lista de agentes de usuario falsos e iterarlos o usar UserAgent del módulo de agente de usuario falso y pasarlo como un encabezado al solicitar un sitio web.

Ejemplo: 

Python3

# Create a list of User-Agents
import requests 
  
  
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) \
AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 \
Safari/537.2'}
response = requests.get(url, headers=header)
  
  
# Use UserAgent from fake_useragent module
import requests
from fake_useragent import UserAgent
  
  
ua = UserAgent()
header = {'User-Agent':str(ua.chrome)}
response = requests.get(url, headers=header)

Encabezado de referencia

  • El encabezado Referer es un encabezado de solicitud HTTP que le permite al sitio saber de qué sitio está llegando.
  • Si llega desde Google, proporcione referer_url en el encabezado de referencia al enviar una solicitud GET.

Sintaxis:

requests.get(url, encabezados={‘referer’: referer_url})

Navegador sin cabeza

  • Usar Selenium/Puppeteer en modo sin cabeza es mucho mejor, ya que el sitio web se raspa mediante la automatización de un navegador.
  • Se utiliza principalmente para descartar sitios web dinámicos y muchas características como la paginación, la autenticación se puede automatizar aquí.
  • Los comandos de JavaScript también se pueden ejecutar aquí.

Ejemplo:

Python3

# Using Selenium Chrome Webdriver to create
# a headless browser
  
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(executable_path="C:/chromedriver.exe", 
                          chrome_options=options)
driver.get(url)

Intervalos de tiempo

  • Es mejor aplicar algunos intervalos de tiempo aleatorios utilizando el módulo de tiempo en el código para aumentar la duración, lo que reduce las posibilidades de bloqueo.

Ejemplo: 

time.sleep(1) # Duerme por 1 segundo

Resolución de captchas

  • Pocos sitios web detectan rastreadores web a través de un Captcha, que se puede resolver implementando servicios de resolución de captcha o esperar unas horas o cambiar la dirección IP para reanudar el raspado.
  • Estos servicios tienen un costo adicional y pueden aumentar el tiempo para extraer datos de los sitios web. Considere el tiempo y los gastos adicionales que puede tener que soportar si elige utilizar un Servicio de resolución de CAPTCHA.

Hay algunos servicios de resolución de CAPTCHA como:  

  • Anticaptcha.
  • MuertePorCaptcha

Evite las trampas Honeypot

  • Muchos sitios intentarán detectar rastreadores web colocando enlaces invisibles que solo seguiría un rastreador.
  • Detecte si un enlace tiene configuradas las propiedades CSS «display: none» o «visibility: hidden» , y debe evitar seguir ese enlace, de lo contrario lo identificará como un raspador. Los Honeypots son una de las formas más fáciles para que los webmasters inteligentes detecten rastreadores y bloqueen todas las requests realizadas por el usuario.

Detectar cambios en el sitio web

  • Muchos sitios web cambian de diseño por muchas razones y esto a menudo hará que los raspadores fallen.
  • Además, algunos sitios web tendrán diseños diferentes en lugares inesperados.
  • Por lo tanto, debe estar presente un sistema de monitoreo perfecto que detecte cambios en los diseños y emita una alerta para corregir el código.

Entonces, estas son las formas en que puede evitar que lo atrapen durante el web scraping.

Publicación traducida automáticamente

Artículo escrito por anilabhadatta 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 *