网络爬虫是一种强大的工具,可帮助您从网站中提取有价值的信息。然而,它也会给被爬取网站的服务器带来负担,因此许多网站会屏蔽发送过多请求的 IP 地址。为避免这种情况,您可以使用代理服务器进行请求。本文将向您展示如何在 Python 中使用代理,以及如何轮换代理 IP 以避免被封禁。
引言
准备工作
开始之前,您需要满足以下先决条件:
✅ 已安装 Python
✅ 具备一定的 Python 编程经验
✅ 已安装 Python requests 库
✅ 一组代理 IP 和端口
要安装 Python,您需要从 Python 官方网站下载安装程序:https://www.python.org/downloads/
您可以选择 Python 3 的最新版本。建议使用最新版本的 Python,以获取最新的功能和安全更新。
下载完成后,运行安装程序并按照提示在计算机上安装 Python。安装过程中,请务必勾选将 Python 添加到系统 PATH 环境变量的选项,这样您就可以在命令行中运行 Python。
安装完成后,您可以通过打开命令提示符或终端并运行命令 `python --version` 来验证 Python 是否安装正确。这将显示您已安装的 Python 版本。
您可以通过打开终端并运行以下命令来检查 `python-requests` 包是否已安装:
$ pip freeze
`pip` 是一款包管理器,通常已随新版 Python 捆绑提供。若因故需单独安装 `pip`,请参考本指南中的说明。
`pip freeze` 将显示您当前安装的所有 Python 包及其版本。检查 `requests` 模块是否出现在该列表中。如果没有,请运行以下命令进行安装:
$ pip install requests
代理配置
本节将讲解如何使用 `python-requests` 配置代理。开始之前,我们需要一个可用的代理以及要发送请求的目标 URL。
基本用法
import requests
proxies = {
'http': 'http://proxy_ip:proxy_port',
'https': 'http://secure_proxy_ip:proxy_port',
}
res = requests.get('https://httpbin.org/get', proxies=proxies)如果您没有可用于测试此代码的私有代理,可以从 freeproxylists.net 上的列表中查找免费的公共代理。请注意,该网站上的代理不适用于任何生产环境,且可能不可靠。
`proxies` 字典的结构必须与代码示例中完全一致。您需要提供一个用于 HTTP 连接的代理和一个用于 HTTPS 连接的代理。这两个代理可以是不同的,也可以是同一个。您可以使用同一个代理处理多种协议。
另外请注意,我在两种连接的代理 URL 中都使用了 HTTP 协议。并非所有代理都拥有 SSL 证书。这两种情况下,与代理的连接都将通过 HTTP 建立。
要对代理进行身份验证,可使用以下语法:
http://user:pass@working-proxy:port
环境变量
如果您不打算使用多组代理,可以将它们导出为环境变量。
以下是在 Linux 终端中导出环境变量的方法
$ export HTTP_PROXY='http://proxy_ip:proxy_port'$ export HTTP_PROXYS='http://secure_proxy_ip:proxy_port'
要查看环境变量,只需运行
$ env
以下是在 PowerShell 中导出环境变量的方法
>_ $Env:HTTP_PROXY='http://proxy_ip:proxy_port'>_ $Env:HTTP_PROXYS='http://secure_proxy_ip:proxy_port'
要查看环境变量,只需运行
>_ Get-ChildItem -Path Env:
以下是在命令提示符中导出环境变量的方法
\> set HTTP_PROXY='http://proxy_ip:proxy_port'\> set HTTP_PROXYS='http://secure_proxy_ip:proxy_port'
要查看环境变量,只需运行
\> set
这样,您无需在代码中定义任何代理。只需发出请求,它就会生效。
如何读取响应?
您可以通过多种方式读取数据,但在大多数情况下,您会希望以纯文本或 JSON 编码字符串的形式读取。
纯文本:
response = requests.get(url)
text_resp = response.text
JSON:对于 JSON 格式的响应,requests 包提供了一个内置方法。
response = requests.get(url)json_resp = response.json()
代理会话
您可能还需要从使用会话机制的网站抓取数据。此时,您需要创建一个会话对象。首先创建一个名为 `session` 的变量,并将其赋值为 requests 库的 `Session()` 方法。接下来,您需要将会话的 `.proxies` 属性设置为代理信息。然后,使用已创建的 `session` 对象发送请求。此时,您只需将 URL 作为参数传入即可。
import requests
session = requests.Session()
session.proxies = {
'http': 'http://proxy_ip:proxy_port',
'https': 'http://secure_proxy_ip:proxy_port',
}
res = session.get('https://httpbin.org/get')请务必将 `proxy_ip` 和 `proxy_port` 替换为代理的实际 IP 和端口。
如何轮换代理 IP
为避免被网站封禁,轮换代理 IP 至关重要。一种实现方法是创建一个包含代理 IP 和端口的列表,并在发送请求时随机选择代理。
以下是一个示例:
def proxy_request(url, **kwargs):
while True:
try:
proxy = random.randint(0, len(ip_addresses) - 1)
proxies = {
'http': ip_addresses(proxy),
'https': ip_addresses(proxy)
}
response = requests.get(url, proxies=proxies, timeout=5, **kwargs)
print(f"Currently using proxy: { proxy['http'] }")
break
except:
print("Error encoutered, changing the proxy...")
return response
print(proxy_request('https://httpbin.org/get'))聘请专业人士
虽然可以使用 Python 自行管理代理,但这过程十分耗时,且获取一套优质的代理可能需要大量时间和金钱。为了节省时间和金钱,您可以使用专业的爬虫工具。WebScrapingAPI 具备内置的代理管理和轮换功能。 我们拥有经过验证的高质量代理池,这些代理更可靠,从长远来看能为您节省时间和金钱。
我们还提供可免费试用的代理模式。只需注册账户并开始 WebScrapingAPI 试用,即可获取免费 API 密钥。以下是使用我们代理模式的代码示例:
import requests
def get_params(object):
params = ''
for key,value in object.items():
if list(object).index(key) < len(object) - 1:
params += f"{key}={value}."
else:
params += f"{key}={value}"
return params
API_KEY = '<YOUR_API_KEY>'
TARGET_URL = 'http://httpbin.org/get'
PARAMETERS = {
"proxy_type":"datacenter",
"device":"desktop"
}
PROXY = {
"http": f"http://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:80",
"https": f"https://webscrapingapi.{ get_params(PARAMETERS) }:{ API_KEY }@proxy.webscrapingapi.com:8000"
}
response = requests.get(
url=TARGET_URL,
proxies=PROXY,
verify=False
)
print(response.text)请注意,若需通过 https 连接代理模式,您的代码必须配置为不验证 SSL 证书。在此情况下,由于您使用的是 Python Requests 库,应设置 `verify=False`。
要点
使用代理是避免在网页抓取过程中被封禁的有效方法。通过轮换代理 IP 并使用代理池,您可以降低被封禁的风险并提高成功率。然而,自行管理代理可能很麻烦,且获取一套优质的代理可能需要花费大量时间和金钱。
订阅 WebScrapingAPI 等高级代理服务后,您将获得多种功能,例如 IP 轮换以及在数据中心代理和住宅代理之间切换的能力。
希望本文能帮助您更好地了解如何在 HttpClient 中使用代理,以及它如何满足您的网页抓取需求。立即注册我们的 14 天免费试用,亲身体验我们的服务,并了解其所有功能和特性。




