La guía completa de proxies para Web Scraping

En redes informáticas, un servidor proxy es una aplicación o dispositivo de servidor que actúa como intermediario para las requests de los clientes que buscan recursos de los servidores que proporcionan esos recursos. 

Dado que el web scraping requiere que se realicen muchas requests a un servidor desde una dirección IP, el servidor puede detectar demasiadas requests y puede bloquear la dirección IP para detener más scraping. Para evitar el bloqueo, se utilizan servidores proxy y el raspado seguirá funcionando a medida que se cambie la dirección IP y no causará ningún problema. También ayuda a ocultar la dirección IP de la máquina, ya que crea anonimato.

Tipos de proxy

Hay tres 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 direcciones 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.

Administración del grupo de servidores proxy

  • Identificar prohibiciones : el proxy debe poder detectar varios tipos de métodos de bloqueo y solucionar los problemas subyacentes, es decir, captchas, redireccionamientos, bloqueos, imágenes fantasma, etc.
  • Errores de reintento: vuelva a intentar la solicitud utilizando un servidor proxy diferente si hay problemas de conexión, bloqueos, captchas, etc. con el proxy actual.
  • Proxies de control : pocos sitios web con autenticación requieren mantener la sesión con la misma IP o, de lo contrario, es posible que se requiera autenticación nuevamente si hay algún cambio en el servidor proxy.
  • Agregar retrasos : aleatorice los retrasos y aplique una buena aceleración para que el sitio web no pueda detectar que está raspando.
  • Ubicación geográfica : pocos sitios web pueden requerir direcciones IP de países específicos, por lo que el conjunto de servidores proxy debe contener el conjunto de servidores proxy de la ubicación geográfica dada.

No se recomiendan los proxies públicos, ya que son de baja calidad y también se consideran peligrosos, ya que pueden infectar la máquina e incluso hacer pública la actividad de web scraping si los certificados SSL no están configurados correctamente.

Los proxies compartidos generalmente se usan si el presupuesto es bajo y se requiere un grupo compartido de IP. Si el presupuesto es más alto y el rendimiento es la máxima prioridad, entonces el grupo dedicado de proxies es el camino a seguir.

Rotación de apoderados

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 crear un grupo de proxy e iterarlo/rotarlo después de una cierta cantidad de requests de un único servidor proxy.

Esto reduce las posibilidades de bloqueo de IP y el raspador no se ve afectado.

servidores proxy = {‘http://78.47.16.54:80’, ‘http://203.75.190.21:80’, ‘http://77.72.3.163:80’}

¿Cómo usar un proxy en el módulo de requests?

  • Importar el módulo de requests .
  • Cree un grupo de proxies y luego gírelos/iterelos.
  • Envíe una solicitud GET usando requestes.get() pasando el proxy como un parámetro a la URL.
  • Devuelve la dirección del servidor proxy de la sesión actual si no hay ningún error de conexión.

Programa:

Python3

import requests
  
# Initialise proxy and url.
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
  
# Send a GET request to the url and
# pass the proxy as parameter.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  
# Prints the content of the requested url.
print(page.text)

Producción:

114.121.248.251

Lo mismo se puede aplicar a múltiples proxies, a continuación se muestra la implementación de lo mismo.

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://ipecho.net/plain'
  
# 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)

Producción:

proxy en el módulo de solicitud

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 *