如何利用 Python 请求模块使用代理服务器 - 终极指南

Ștefan Răcila on Apr 20 2023

博客图片

导言

网络搜刮是一种强大的工具,可以让你从网站中提取有价值的信息。不过,这也会给你正在进行搜刮的网站的服务器造成压力,这就是为什么许多网站会阻止发出过多请求的 IP 地址。为了避免这种情况,你可以使用代理来进行请求。在本文中,我将向你介绍如何使用 Python 和代理,以及如何轮换代理 IP 以避免被屏蔽。

设置

在开始之前,您需要具备以下先决条件:

✅ 已安装 Python

✅ 一定的 Python 使用经验

✅ 还安装了 Python 请求库

代理 IP 和端口列表

要安装 Python,您需要从 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 上的列表中查找免费的公共代理。请注意,该网站上的代理并不适用于任何生产环境,而且可能并不可靠。

代理 "字典的结构必须与示例代码中的结构完全相同。您需要为 HTTP 连接提供一个代理,为 HTTPS 连接提供一个代理。代理可能不同,也可能不一样。您可以为多个协议使用同一个代理。

另外请注意,我在两个连接的代理 URL 中都使用了 HTTP 模式。并非所有代理都有 SSL 证书。在这两种情况下,与代理的连接都将使用 HTTP。

使用此语法可对代理进行身份验证:

http://user:pass@working-proxy:port

环境变量

如果不打算使用多组代理,可以将它们导出为环境变量。

以下是在Linux shell中导出环境变量的方法

$ export HTTP_PROXY='http://proxy_ip:proxy_port'

$ export HTTP_PROXYS='http://secure_proxy_ip:proxy_port'

要检查环境,只需运行

$ 环境

以下是在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'

要检查环境,只需运行

\> 设置

这样,您就无需在代码中定义任何代理。只需发出请求,就能正常工作。

如何阅读回复?

您可以通过多种方式读取数据,但在大多数情况下,您会希望以纯文本或 JSON 编码字符串的形式读取数据。

纯文本:

response = requests.get(url)

text_resp = response.text

JSON,对于 JSON 格式的响应,请求包提供了一个内置方法。

response = requests.get(url)

json_resp = response.json()

代理会话

您可能还想从使用会话的网站上抓取数据。在这种情况下,您需要创建一个会话对象。首先创建一个名为 `session` 的变量,并将其分配给请求的 `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内置代理管理和轮换功能。我们拥有经过验证的高质量代理服务器池,这些代理服务器更加可靠,从长远来看可以为您节省时间和金钱。

我们还有一个代理模式,您可以免费试用。要获得免费的 API 密钥,您只需注册一个账户并开始试用WebScrapingAPI。这是如何使用代理模式的代码示例:

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 天免费试用版,测试我们的服务并了解其所有特性和功能。

新闻和更新

订阅我们的时事通讯,了解最新的网络搜索指南和新闻。

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

相关文章

缩图
指南如何抓取亚马逊产品数据:最佳实践与工具综合指南

通过我们的深入指南,探索刮擦亚马逊产品数据的复杂性。从最佳实践和亚马逊 Scraper API 等工具到法律注意事项,了解如何应对挑战、绕过验证码并高效提取有价值的见解。

Suciu Dan
作者头像
Suciu Dan
15 分钟阅读
缩图
使用案例释放金融数据的力量:探索传统和替代数据

深入了解财务数据在商业决策中的变革作用。了解传统财务数据和替代数据的新兴意义。

Suciu Dan
作者头像
Suciu Dan
8 分钟阅读
缩图
指南网络抓取 API 快速入门指南

开始使用 WebScrapingAPI - 终极网络搜索解决方案!收集实时数据,绕过反僵尸系统,享受专业支持。

米赫内亚-奥克塔维安-马诺拉什
作者头像
米赫内亚-奥克塔维安-马诺拉什
9 分钟阅读