如何为 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())
有时,您可能会遇到这样的超时错误:
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。