Proxy Port logo
如何 操作指南 > 如何为 urllib 设置代理

如何为 urllib 设置代理

在本文中,我们将探讨如何为 Python3 urllib 设置代理,这是一个用于发出 HTTP 请求的内置库。 我们将提供一个代码片段,演示如何定义代理服务器和端口号、创建 ProxyHandler 对象以及使用它通过代理发出请求。

为Python3 urllib设置代理,可以使用urllib.request.ProxyHandler类定义代理服务器和端口号,然后使用该对象创建一个opener 将用于通过代理发出请求的对象。

下面是一个示例代码片段,展示了如何使用 urllib 设置代理:
from urllib import request

# 定义代理服务器和端口号
proxy_server = 'http://yourproxyserver.com'
proxy_port = '8080'

# 使用代理服务器和端口创建一个 ProxyHandler 对象
proxy_handler = request.ProxyHandler(
    {
        'http': f'{proxy_server}:{proxy_port}',
        'https': f'{proxy_server}:{proxy_port}'
    }
)

# 使用 ProxyHandler 创建一个 opener 对象
opener = request.build_opener(proxy_handler)

# 使用opener通过代理发出请求
response = opener.open('http://example.com')

# Print the response
print(response.read())

            
        
在此示例中,将 http://yourproxyserver.com 替换为您的代理服务器的 URL,并将 8080 替换为您的代理服务器正在使用的端口号。 然后将 http://example.com 替换为您要通过代理访问的网站的 URL。

如果您没有自己的代理,您可以从代理端口提供商获取一个。
安装包:
$ pip install proxyport2

            
设置API_KEY并调用get_proxy函数:
from proxyport2 import set_api_key, get_proxy

set_api_key('<API_KEY>')

print(get_proxy())


        
参考详细说明免费获取API Key。
以下是如何组合前面步骤的示例:
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())


        
不要忘记用您的实际替换 API 密钥.

有时,您可能会遇到这样的超时错误:
TimeoutError: The read operation timed out

            
公共代理不是很可靠,也不会持续很长时间。 要克服这些障碍,您需要尝试重试:
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)


        
如果您计划从多个页面进行抓取,您应该考虑使用像 Scrapy 这样的网络抓取框架,而不是低级 urllib。
抓取代理
了解更多