Navegando por el laberinto: flujos de trabajo de proxy gratuitos para la extracción de contenido dinámico
Comprensión del scraping de contenido dinámico
El contenido dinámico, esa fuerza impetuosa que anima las páginas web modernas, escapa al control de las ingenuas solicitudes HTTP. Generado por JavaScript, exige más que simples GETs; requiere orquestación: solicitudes que se hacen pasar por navegadores legítimos, proxies que burlan las prohibiciones de IP y código que lee entre líneas.
El papel de los proxies en el scraping dinámico
Los proxies son las máscaras de nuestra mascarada digital, esenciales para:
- Cómo evadir los límites de velocidad basados en IP
- Cómo eludir las restricciones geográficas
- Distribuir el tráfico para evitar la detección
Pero ¿cómo se consigue este anonimato sin tener que echar mano de las arcas? Proxies gratuitos: efímeros, ingobernables y, sin embargo, indispensables. Analicemos su uso con precisión quirúrgica.
Flujo de trabajo 1: Rotación de servidores proxy públicos gratuitos con solicitudes y BeautifulSoup
Ingredientes
- Listas de proxy gratuitas
solicitudes
,Sopa hermosa
en Python
Pasos
- Proxies de cosecha
Extraer una lista de servidores proxy gratuitos, por ejemplo, de lista-de-proxy-gratis.net.
“pitón
solicitudes de importación
Desde bs4 importar BeautifulSoup
definición obtener_proxies():
url = 'https://lista-de-proxy-gratuita.net/'
sopa = BeautifulSoup(solicitudes.get(url).content, 'html.parser')
proxies = set()
para la fila en soup.find('table', id='proxylisttable').tbody.find_all('tr'):
si row.find_all('td')[6].text == 'yes': # Solo servidores proxy HTTPS
ip = fila.find_all('td')[0].texto
puerto = fila.find_all('td')[1].texto
proxies.add(f'{ip}:{puerto}')
lista de retorno(proxies)
“`
- Rotar servidores proxy para solicitudes
“pitón
importar aleatorio
proxies = obtener_proxies()
def buscar_con_proxy(url):
proxy = aleatorio.elección(proxies)
intentar:
resp = solicitudes.obtener(url, proxies={“http”: f”http://{proxy}”, “https”: f”http://{proxy}”}, tiempo de espera=5)
si resp.status_code == 200:
devolver texto resp.
excepto Excepción:
aprobar
devolver Ninguno
“`
- Manejar contenido dinámico
Para páginas con JS mínimo, inspeccione el tráfico de red para encontrar puntos finales XHR y obtener datos directamente.
Ventajas y desventajas
Característica | Ventajas | Contras |
---|---|---|
Configuración | Rápido, fácil | Los proxies a menudo no son confiables |
Anonimato | La rotación de IP reduce las prohibiciones | Proxies lentos o muertos frecuentes |
Contenido dinámico | Funciona solo para sitios simples renderizados con JS | Los sitios JS completos necesitan un emu del navegador |
Flujo de trabajo 2: Rastreo con Selenium y rotación de proxy gratuito
Ingredientes
- Proxies SSL
- Selenio con un controlador de navegador
Pasos
- Obtener una lista de servidores proxy
Lógica similar a la anterior, pero orientada a... sslproxies.org.
- Configurar Selenium para usar un proxy
“pitón
desde selenio importar webdriver
desde selenium.webdriver.chrome.options importar Opciones
def obtener_controlador_de_chrome(proxy):
opciones = Opciones()
opciones.add_argument(f'–proxy-server=http://{proxy}')
opciones.add_argument('–headless')
devolver webdriver.Chrome(opciones=opciones)
“`
- Extraer contenido dinámico
pitón
proxies = obtener_proxies()
controlador = obtener_controlador_chrome(random.choice(proxies))
driver.get('https://quotes.toscrape.com/js/')
contenido = driver.page_source
conductor.salir()
Nota poética
Con Selenium, el navegador es su pincel, que pinta la página como la vería el usuario humano: JavaScript, CSS y todos los matices sutiles de la interactividad.
Ventajas y desventajas
Característica | Ventajas | Contras |
---|---|---|
Representación JS | Maneja cualquier contenido dinámico | Gran cantidad de recursos |
Rotación de proxy | Enmascara la propiedad intelectual de manera efectiva | Los proxies pueden ralentizar o bloquear el navegador |
Detección | Más parecido a lo humano, menos detectable | Los proxies gratuitos suelen estar bloqueados por sitios grandes |
Flujo de trabajo 3: Puppeteer con ProxyChain para entusiastas de Node.js
Ingredientes
Pasos
- Adquirir Proxies Gratuitos
Javascript
const axios = require('axios');
función asíncrona getProxies() {
const res = await axios.get('https://www.proxy-list.download/api/v1/get?type=https');
devolver res.data.split('\r\n').filter(Boolean);
}
- Utilice ProxyChain para rotar proxies con Puppeteer
"`javascript
const titiritero = require('titiritero');
constante ProxyChain = require('proxy-chain');
(async() => {
proxies const = esperar getProxies();
para (const proxyUrl de proxies) {
constante anonymizedProxy = await ProxyChain.anonymizeProxy(http://${ProxyUrl}
);
const navegador = await puppeteer.launch({
argumentos: [--proxy-server=${Proxy anónimo}
, '–no-sandbox', '–disable-setuid-sandbox'],
sin cabeza: cierto,
});
const page = await navegador.newPage();
intentar {
esperar página.goto('https://quotes.toscrape.com/js/', {waitUntil: 'networkidle2'});
const contenido = await página.contenido();
//Contenido del proceso…
} captura (e) {
// Omitir servidores proxy malos
}
esperar navegador.close();
}
})();
“`
Ventajas y desventajas
Característica | Ventajas | Contras |
---|---|---|
Automatización | Scripting robusto en Node.js | Dependencia de Node.js |
Rotación de proxy | ProxyChain gestiona los fallos | Los proxies gratuitos suelen ser inestables y lentos |
Contenido dinámico | Puppeteer renderiza todo JS | Velocidad limitada por la velocidad del proxy |
Flujo de trabajo 4: Programación inteligente de solicitudes con Scrapy + Middleware de proxy gratuito
Ingredientes
- Rasposo
- proxies rotativos fragmentados
- Listas de proxy gratuitas (proxyscrape.com)
Pasos
- Instalar middleware
pip instala proxies rotativos scrapy
- Configurar los ajustes de Scrapy
pitón
# configuraciones.py
RUTA_DE_LISTA_DE_PROXYS_ROTACIÓN = 'proxies.txt'
DESCARGADOR_MIDDLEWARES = {
'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}
- Completar lista de proxy
Descargar y guardar proxies en proxies.txt
:
https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=1000&country=all&ssl=all&anonymity=all
- Raspar con Scrapy Spider
Scrapy, con proxies rotatorios, se mueve de puntillas por el jardín de contenido dinámico. Para JS completo, usa dramaturgo rudimentario:
intento
instalación de pip scrapy-playwright
Y en tu araña:
“pitón
importar scrapy
clase QuotesSpider(scrapy.Spider):
nombre = “comillas”
URL de inicio = ['https://quotes.toscrape.com/js/']
def start_requests(self): para url en self.start_urls: rendimiento scrapy.Request(url, meta={"dramaturgo": True}) def parse(self, respuesta): para cita en respuesta.css("div.quote"): rendimiento { "texto": cita.css("span.text::text").get(), "autor": cita.css("small.author::text").get(), }
“`
Ventajas y desventajas
Característica | Ventajas | Contras |
---|---|---|
Velocidad | Programación eficiente de solicitudes | Curva de aprendizaje de Scrapy |
Rotación de proxy | El middleware gestiona las prohibiciones | Los proxies gratuitos son menos confiables |
Soporte JS | Con Playwright, maneja JS completo | Configuración de peso pesado |
Flujo de trabajo 5: Extracción orientada a API mediante puertas de enlace de proxy gratuitas
Ingredientes
- API para compartir en la web (nivel gratuito limitado)
- Plan gratuito de ScraperAPI (uso limitado)
Pasos
- Obtener clave API o punto final de proxy
Regístrate y obtén un endpoint gratuito.
- Solicitudes de ruta a través de la puerta de enlace proxy
Para ScraperAPI:
pitón
api_key = 'SU_CLAVE_API'
url = f'http://api.scraperapi.com/?api_key={api_key}&url=https://quotes.toscrape.com/js/'
respuesta = solicitudes.get(url)
Para servidores proxy de Web Share, utilice lo mismo que en los ejemplos anteriores.
Ventajas y desventajas
Característica | Ventajas | Contras |
---|---|---|
Fiabilidad | Proxies administrados, menos tiempo de inactividad | Solicitudes gratuitas limitadas |
Facilidad de uso | Rotación de proxy de resúmenes | Puede bloquear ciertos sitios |
Contenido dinámico | Algunas API procesan JS antes de devolverlo | Niveles de pago para uso intensivo |
Tabla resumen comparativa
Flujo de trabajo | Compatibilidad con JS dinámico | Rotación de proxy | Fiabilidad | Limitaciones gratuitas | Mejor caso de uso |
---|---|---|---|---|---|
Solicitudes + Proxies gratuitos | Bajo | Manual | Bajo | Proxies bloqueados o lentos | API XHR simples |
Selenium + Proxies gratuitos | Alto | Manual | Medio | Proxies bloqueados, alto consumo de CPU | Sitios JS complejos, de pequeña escala |
Titiritero + ProxyChain | Alto | Automatizado | Medio | Fallos frecuentes del proxy | Automatización con Node.js |
Scrapy + Proxies rotativos | Alto (con dramaturgo) | Automatizado | Medio | Configuración de middleware, proxies lentos | Raspado avanzado y escalable |
Puertas de enlace de API de proxy | Alto (depende de la API) | Automatizado | Alto | Solicitudes limitadas, es necesario registrarse | Raspado único y confiable |
Recursos
- lista-de-proxy-gratis.net
- sslproxies.org
- lista de proxy.descargar
- proxyscrape.com/lista-de-proxy-gratuita
- proxies rotativos fragmentados
- dramaturgo rudimentario
- Proxy del complemento extra de puppeteer
- Lista de servidores proxy gratuitos para compartir en la Web
- API de raspador
Deje que su código sea el cincel y sus proxies el mármol: esculpa con paciencia, porque cada página dinámica es una escultura digital que espera ser revelada debajo de la superficie.
Comentarios (0)
Aún no hay comentarios aquí, ¡puedes ser el primero!