首页 后端开发 Python教程 如何在 Python 中使用代理

如何在 Python 中使用代理

Nov 16, 2024 pm 12:00 PM

How to Use Proxies in Python

如果您已经使用 Python 了一段时间,特别是在数据抓取的特定情况下,您可能遇到过在尝试检索数据时被阻止的情况。想。在这种情况下,了解如何使用代理是一项方便的技能。

在本文中,我们将探讨什么是代理、它们为何有用,以及如何通过 Python 中的库请求来使用它们。

什么是代理?

让我们从头开始定义什么是代理。

您可以将代理服务器视为计算机和互联网之间的“中间人”。当您向网站发送请求时,该请求首先通过代理服务器。然后,代理将您的请求转发到网站,接收响应并将其发送回给您。此过程会屏蔽您的 IP 地址,使请求看起来像是来自代理服务器而不是您自己的设备。

可以理解,这有很多后果和用途。例如,它可以用来绕过一些讨厌的 IP 限制,或保持匿名。

为什么在网络抓取中使用代理?

那么,为什么代理在抓取数据时可能会有所帮助?嗯,我们之前已经给出了理由。例如,您可以使用它们来绕过某些限制。

因此,在网页抓取的特定情况下,它们可能会很有用,原因如下:

  • 避免 IP 封锁:网站经常监视可疑活动,例如单个 IP 在短时间内发出大量请求。 使用代理有助于将您的请求分发到多个 IP,从而避免被阻止。
  • 绕过地理限制:某些内容只能从某些位置访问,代理可以帮助您看起来就像是从其他国家/地区访问该网站一样。
  • 增强隐私:代理可通过隐藏您的真实 IP 地址来保持您的抓取活动匿名。

如何在Python中使用请求来使用代理

requests 库是在 Python 中发出 HTTP 请求的流行选择,并且将代理合并到您的请求中非常简单。

让我们看看如何!

获取有效代理

首先要做的事情是:在实际使用代理之前,您必须获得有效的代理。为此,您有两种选择:

  • 免费代理:您可以从免费代理列表等网站免费获取代理。它们很容易访问,但是,它们可能不可靠或很慢。
  • 付费代理:Bright Data 或 ScraperAPI 等服务提供可靠的代理,具有更好的性能和支持,但您必须付费。

使用代理处理请求

现在您已经有了代理列表,您可以开始使用它们了。例如,您可以像这样创建一个字典:

proxies = {
    'http': 'http://proxy_ip:proxy_port',
    'https': 'https://proxy_ip:proxy_port',
}
登录后复制

现在您可以使用代理发出请求:

import requests

proxies = {
    'http': 'http://your_proxy_ip:proxy_port',
    'https': 'https://your_proxy_ip:proxy_port',
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
登录后复制

要查看请求的结果,您可以打印响应:

print(response.status_code)  # Should return 200 if successful
print(response.text)         # Prints the content of the response
登录后复制

请注意,如果一切顺利,响应应该显示代理服务器的 IP 地址,而不是您的。

使用请求的代理身份验证:用户名和密码

如果您的代理需要身份验证,您可以通过多种方式处理。

方法 1:在代理 URL 中包含凭据
要包含用户名和密码来管理代理中的身份验证,您可以这样做:

proxies = {
    'http': 'http://username:password@proxy_ip:proxy_port',
    'https': 'https://username:password@proxy_ip:proxy_port',
}
登录后复制

方法2:使用HTTPProxyAuth
或者,您可以使用 HTTPProxyAuth 类来处理身份验证,如下所示:

from requests.auth import HTTPProxyAuth

proxies = {
    'http': 'http://proxy_ip:proxy_port',
    'https': 'https://proxy_ip:proxy_port',
}

auth = HTTPProxyAuth('username', 'password')

response = requests.get('https://httpbin.org/ip', proxies=proxies, auth=auth)
登录后复制

如何使用旋转代理处理请求

如果您发出大量请求,使用单个代理可能还不够。在这种情况下,您可以使用轮换代理:这会定期或根据请求更改代理 IP 地址。

如果您想测试此解决方案,您有两个选择:使用列表手动轮换代理或使用代理轮换服务。

让我们看看这两种方法!

使用代理列表

如果您有代理列表,您可以手动轮换它们,如下所示:

import random

proxies_list = [
    'http://proxy1_ip:port',
    'http://proxy2_ip:port',
    'http://proxy3_ip:port',
    # Add more proxies as needed
]

def get_random_proxy():
    proxy = random.choice(proxies_list)
    return {
        'http': proxy,
        'https': proxy,
    }

for i in range(10):
    proxy = get_random_proxy()
    response = requests.get('https://httpbin.org/ip', proxies=proxy)
    print(response.text)
登录后复制

使用代理轮换服务

ScraperAPI 等服务可以为您处理代理轮换。您通常只需要更新他们提供的代理 URL 并管理 URL 字典,如下所示:

proxies = {
    'http': 'http://your_service_proxy_url',
    'https': 'https://your_service_proxy_url',
}

response = requests.get('https://httpbin.org/ip', proxies=proxies)
登录后复制

结论

在 Python 中使用代理对于网页抓取、测试和访问地理限制内容来说是一项很有价值的技术。正如我们所见,使用库请求将代理集成到 HTTP 请求中非常简单。

从网络上抓取数据时的一些技巧:

  • 尊重网站政策:请务必检查网站的 robots.txt 文件和服务条款。
  • 处理异常:网络操作可能会因各种原因而失败,因此请确保处理异常并在必要时实施重试。
  • 保护您的凭据:如果您使用经过身份验证的代理,请确保您的凭据安全并避免将其硬编码到脚本中。

编码愉快!

以上是如何在 Python 中使用代理的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles