在Python Requests中使用代理

评论: 0

简而言之,代理是作为连接网络服务的外层的服务器。它们充当计算机与用户想要从中提取信息的网站之间的中间人。用户的请求不是直接发送到相关网站,而是首先被导向代理,然后代理将其发送到终端服务器。因此,网站保存的是代理服务器的IP地址,而不是用户的IP地址。

那么,为什么要使用代理

  • 匿名性:

例如,如果需要从网站收集信息而不用担心限制或屏蔽。代理通过掩盖真实用户的IP地址来改变他们的真实数字身份。

  • 绕过限制:

可以使用来自没有限制的特定国家的代理。这是因为在某些国家,对一些程序和网站的访问是有限制或被屏蔽的。

  • 负载均衡:
如果大量请求被发送到特定网站,系统可能会过载。因此,被屏蔽的风险很大。同时使用多个代理允许用户均匀地分配对特定网站的请求,从而避免被屏蔽。

设置和安装Python Requests

Requests是使用Python发送HTTP请求的库。它使GET和POST请求变得简单。使用没有代理的Python Requests可以发送HTTP请求,但它不提供匿名性或绕过限制。

1. 安装Requests库

要安装requests,只需在终端中输入以下命令:


pip install requests

2. 验证安装

要验证所需的库是否正确设置,你需要打开Python开发环境并运行命令:


import requests 

print(requests.__version__)

如果一切都正确完成,脚本将返回版本号。

如何在Python Requests中使用代理

一旦我们安装了requests库,我们就可以开始执行HTTP请求。然而,要结合代理,Python中必须进行某些配置。

让我们检查在Python中为请求正确配置代理的步骤。我们将单独考虑带有SOCKS代理配置的Python Requests。

1. 配置代理服务器

对于使用requests库的用户来说,使用Python设置代理非常简单。它要求将代理服务器地址传递到字典中,然后在进行HTTP请求时使用。


proxies = {
    "http": "http://your-proxy-ip:port",
    "https": "http://your-proxy-ip:port",
}

response = requests.get("http://example.com", proxies=proxies)

2. 代理认证

使用Python Requests时,代理认证很容易设置。让我们仔细看看细节。


proxies = { 
    "http": "http://username:password@your-proxy-ip:port", 
    "https": "http://username:password@your-proxy-ip:port", 
} 

response = requests.get("http://example.com", proxies=proxies)

需要填写的两个新字段是:

  • username – 代理用户名;
  • password – 代理密码。

3. 使用SOCKS代理

对于需要更高匿名级别的用户,或者如果您正在使用严格限制的网站,标准的HTTP代理可能无法工作。在这种情况下,SOCKS代理可能更好。

要启用SOCKS代理支持,需要使用下面列出的命令安装额外的库:


pip install requests[socks]

一旦安装完成,Python Requests允许您设置可以使用的SOCKS代理,如下例所示。


import requests

proxies = {
    "http": "socks5h://your-proxy-ip:port",
    "https": "socks5h://your-proxy-ip:port",
}

response = requests.get("http://example.com", proxies=proxies)

如果代理服务器需要认证,请如下所示包含它们。


proxies = {
    "http": "socks5h://username:password@your-proxy-ip:port",
    "https": "socks5h://username:password@your-proxy-ip:port",
}

在Python Requests中管理带有代理的会话

当通过单个代理发出多个请求时,与其将其添加到每个请求中,使用带有代理的Python Requests会话变得更加高效。

使用代理的这种方法有助于在所有会话中保留设置。它还简化了代码,提高了性能,最重要的是,使实现变得更加容易。

1. 使用带有代理的Python Requests会话

创建会话非常简单,只需键入requests.Session()。

考虑以下示例:


import requests

# 创建会话
session = requests.Session()

session.proxies = {
    "http": "http://username:password@your-proxy-ip:port",
    "https": "http://username:password@your-proxy-ip:port",
}

# 通过会议提出要求
response = session.get("http://example.com")

此会话中的所有Python请求将默认使用设置的代理,无需任何额外配置。

2. 在Python Requests中处理多个代理

当您积极与网站互动,无论是为了抓取目的还是自动化,反复使用相同的代理可能会导致您的账户被屏蔽。通过轮换代理,如果您有几个不同的代理服务器,这是可以管理的。

以下示例显示了一个循环的实现,该循环为与网页的每次交互轮换代理:


import requests
import random

proxies_list = [
    "http://username:password@your-proxy-ip[1]:port",
    "http://username:password@your-proxy-ip[2]:port",
    "http://username:password@your-proxy-ip[3]:port",
]

session = requests.Session()

for _ in range(5):
    proxy = random.choice(proxies_list)  # 随机选择代理
    session.proxies = {"http": proxy, "https": proxy}

    response = session.get("http://example.com")
    print(f"Used proxy: {proxy}")
    print(response.status_code)

结论

总结一下,这里有一些建议可能帮助您更好地管理代理:

  • 使用会话,这样您就不必为每个请求设置代理。
  • 使用没有日志的匿名代理以获得更好的保护。
  • 为了防止被屏蔽,使用多个代理。

在本文中,我们涉及了代理服务器是什么,如何在Python Requests中正确使用代理,以及通过会话管理代理以简化代码。示例还显示了SOCKS和常规代理的使用,如何处理认证,以及代理管理。

评论:

0 评论