Cómo configurar un proxy para urllib
En este artículo, exploraremos cómo configurar un proxy para Python3 urllib, una biblioteca integrada que se utiliza para realizar solicitudes HTTP. Proporcionaremos un fragmento de código que demuestra cómo definir un servidor proxy y un número de puerto, crear un objeto ProxyHandler y usarlo para realizar solicitudes a través del proxy.
Para configurar un proxy para Python3 urllib, puede usar la clase
urllib.request.ProxyHandler
para definir el servidor proxy y el número de puerto, y luego usar este objeto para crear un opener
objeto que se utilizará para realizar solicitudes a través del proxy.Aquí hay un fragmento de código de ejemplo que muestra cómo configurar un proxy usando urllib:
from urllib import request
# Definir el servidor proxy y el número de puerto
proxy_server = 'http://yourproxyserver.com'
proxy_port = '8080'
# Cree un objeto ProxyHandler con el servidor proxy y el puerto
proxy_handler = request.ProxyHandler(
{
'http': f'{proxy_server}:{proxy_port}',
'https': f'{proxy_server}:{proxy_port}'
}
)
# Cree un objeto de apertura con ProxyHandler
opener = request.build_opener(proxy_handler)
# Use el abridor para hacer una solicitud a través del proxy
response = opener.open('http://example.com')
# Imprime la respuesta
print(response.read())
En este ejemplo, reemplace
http://yourproxyserver.com
con la URL de su servidor proxy y 8080 con el número de puerto que utiliza su servidor proxy. Luego reemplace http://example.com
con la URL del sitio web al que desea acceder a través del proxy.Si no tiene su propio proxy, puede obtener uno del paquete del proveedor de Proxy Port.
Paquete de instalación:
$ pip install proxyport2
Configure
API_KEY
y llame a la función get_proxy
:from proxyport2 import set_api_key, get_proxy
set_api_key('<API_KEY>')
print(get_proxy())
Obtenga una clave de API de forma gratuita consultando las instrucciones detalladas.
Aquí hay un ejemplo de cómo puede combinar los pasos anteriores:
from urllib import request
from proxyport2 import set_api_key, get_proxy
set_api_key('<API_KEY>')
proxy = get_proxy()
proxy_handler = request.ProxyHandler(
{'http': proxy, 'https': proxy})
opener = request.build_opener(proxy_handler)
response = opener.open('https://example.com', timeout=5)
print(response.read())
A veces, puede encontrar errores de tiempo de espera como este:
TimeoutError: The read operation timed out
Los proxies públicos no son muy confiables y no duran mucho. Para superar estos obstáculos, debe intentar reintentos:
from urllib import request
from proxyport2 import set_api_key, get_proxy
set_api_key('<API_KEY>')
for i in range(10):
proxy = get_proxy()
proxy_handler = request.ProxyHandler(
{'http': proxy, 'https': proxy})
opener = request.build_opener(proxy_handler)
try:
response = opener.open('https://example.com', timeout=5)
print(response.read())
break
except Exception as e:
print(e)
Si planea raspar desde varias páginas, debería considerar usar un marco de raspado web como Scrapy en lugar del urllib de bajo nivel.