
Adélia Cruz
Neural Network Developer

aiohttp es un potente framework para cliente/servidor HTTP asíncrono para Python. Aprovecha la librería asyncio de Python para permitir operaciones de red concurrentes, lo que lo hace altamente eficiente para tareas como web scraping, desarrollo web y cualquier operación relacionada con la red.
Características:
asyncio para operaciones de red no bloqueantes.Antes de comenzar a usar aiohttp, asegúrate de tener:
Instala aiohttp usando pip:
pip install aiohttp
Aquí te mostramos cómo realizar una solicitud GET simple usando aiohttp:
import asyncio
import aiohttp
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
status = response.status
text = await response.text()
print(f'Código de estado: {status}')
print('Cuerpo de la respuesta:', text)
if __name__ == '__main__':
asyncio.run(fetch('https://httpbin.org/get'))
Vamos a extraer las citas y sus autores del sitio web Quotes to Scrape:
import asyncio
import aiohttp
from bs4 import BeautifulSoup
async def fetch_content(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def scrape_quotes():
url = 'http://quotes.toscrape.com/'
html = await fetch_content(url)
soup = BeautifulSoup(html, 'html.parser')
quotes = soup.find_all('div', class_='quote')
for quote in quotes:
text = quote.find('span', class_='text').get_text(strip=True)
author = quote.find('small', class_='author').get_text(strip=True)
print(f'{text} — {author}')
if __name__ == '__main__':
asyncio.run(scrape_quotes())
Salida:
“El mundo tal como lo hemos creado es un proceso de nuestro pensamiento. No se puede cambiar sin cambiar nuestro pensamiento.” — Albert Einstein
“Son nuestras decisiones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades.” — J.K. Rowling
... (citas adicionales)
En esta sección, exploraremos cómo integrar CapSolver con aiohttp para evitar los captchas. CapSolver es un servicio externo que ayuda a resolver varios tipos de captchas, incluyendo ReCaptcha v2, v3.
Mostraremos cómo resolver ReCaptcha V2 usando CapSolver y luego acceder a una página que requiere la resolución de captcha.
Primero, instala el paquete CapSolver:
pip install capsolver
Ahora, aquí te mostramos cómo puedes resolver un ReCaptcha V2 y usar la solución en tu solicitud:
import asyncio
import os
import aiohttp
import capsolver
# Establece tu clave de API de CapSolver
capsolver.api_key = os.getenv("CAPSOLVER_API_KEY", "Tu clave de API de CapSolver")
PAGE_URL = os.getenv("PAGE_URL", "https://example.com") # URL de la página con captcha
SITE_KEY = os.getenv("SITE_KEY", "SITE_KEY") # Clave del sitio del captcha
async def solve_recaptcha_v2():
solution = capsolver.solve({
"type": "ReCaptchaV2TaskProxyless",
"websiteURL": PAGE_URL,
"websiteKey": SITE_KEY
})
return solution['solution']['gRecaptchaResponse']
async def access_protected_page():
captcha_response = await solve_recaptcha_v2()
print("Captcha resuelto!")
async with aiohttp.ClientSession() as session:
data = {
'g-recaptcha-response': captcha_response,
# Incluye otros datos del formulario si es requerido por el sitio web
}
async with session.post(PAGE_URL, data=data) as response:
content = await response.text()
print('Contenido de la página:', content)
if __name__ == '__main__':
asyncio.run(access_protected_page())
Nota: Reemplaza PAGE_URL con la URL de la página que contiene el captcha y SITE_KEY con la clave del sitio del captcha. La clave del sitio generalmente se encuentra en el código fuente HTML de la página dentro del widget del captcha.
Para enrutar tus solicitudes a través de un proxy, especifica el parámetro proxy:
import asyncio
import aiohttp
async def fetch(url, proxy):
async with aiohttp.ClientSession() as session:
async with session.get(url, proxy=proxy) as response:
return await response.text()
async def main():
proxy = 'http://usuario:contraseña@servidorproxy:puerto'
url = 'https://httpbin.org/ip'
content = await fetch(url, proxy)
print('Cuerpo de la respuesta:', content)
if __name__ == '__main__':
asyncio.run(main())
Puedes administrar cookies usando CookieJar:
import asyncio
import aiohttp
async def main():
jar = aiohttp.CookieJar()
async with aiohttp.ClientSession(cookie_jar=jar) as session:
await session.get('https://httpbin.org/cookies/set?name=value')
# Mostrar las cookies
for cookie in jar:
print(f'{cookie.key}: {cookie.value}')
if __name__ == '__main__':
asyncio.run(main())
Puedes enviar encabezados personalizados y realizar solicitudes POST con aiohttp:
import asyncio
import aiohttp
async def main():
headers = {
'User-Agent': 'Mozilla/5.0 (compatible)',
'Accept-Language': 'es-ES,es;q=0.5',
}
data = {
'username': 'usuarioprueba',
'password': 'contraseñaprueba',
}
async with aiohttp.ClientSession() as session:
async with session.post('https://httpbin.org/post', headers=headers, data=data) as response:
json_response = await response.json()
print('Respuesta JSON:', json_response)
if __name__ == '__main__':
asyncio.run(main())
Reclama tu código de bonificación para las mejores soluciones de captcha en CapSolver: scrape. Después de canjearlo, obtendrás un 5% de bonificación adicional después de cada recarga, ilimitadas veces.

Con aiohttp, puedes realizar eficientemente tareas de web scraping asíncronas y manejar múltiples operaciones de red concurrentemente. Integrarlo con CapSolver te permite resolver captchas como ReCaptcha V2, permitiendo el acceso a contenido que de otra manera podría estar restringido.
Siéntete libre de ampliar estos ejemplos para satisfacer tus necesidades específicas. Recuerda siempre respetar los términos de servicio de los sitios web que extraes información y cumplir con las leyes.
¡Feliz scraping!
Una guía práctica de JavaScript y Node.js para integrar la API de CapSolver y resolver desafíos de reCAPTCHA v2, reCAPTCHA v3 y Cloudflare Turnstile.

Domina el scraping de datos de vuelo aprendiendo a resolver desafíos complejos de CAPTCHA. Descubre tipos de verificación, ejemplos de código en Python y mejores prácticas para el scraping ético.
