织梦CMS - 轻松建站从此开始!

欧博ABG官网-欧博官方网址-会员登入

如何通过PythoDG游戏n使用Selenium设置爬虫代理

时间:2024-09-06 00:29来源: 作者:admin 点击: 2 次
使用Selenium可以抓取动态网站,但是您的脚本可能会被检测为机器人并且您的 IP 被禁止。从好的方面来说,您可以使用 Selenium 代理来避免这一切。

Python使用Selenium设置爬虫代理

Python使用Selenium设置爬虫代理

Scraping

如何通过Python使用Selenium设置爬虫代理

作者姚伟斌 28 11 月, 202317 7 月, 2023

使用Selenium可以抓取动态网站,DG游戏但是您的脚本可能会被检测为机器人并且您的 IP 被禁止。从好的方面来说,您可以使用 Selenium 代理来避免这一切。

什么是Selenium代理?

代理充当客户端和服务器之间的中介。通过它,客户端可以匿名和安全地向其他服务器发出请求,并避免地域限制。

无头浏览器支持像 HTTP 客户端这样的代理服务器。Selenium 代理有助于保护您的 IP 地址并避免在访问网站时被阻止。

继续阅读以了解如何在 Selenium 中设置代理以进行网络抓取!

准备工作

首先,您需要安装 Python 3。大多数平台默认都有它,因此您可以使用以下命令检查是否安装:

python --version

它应该返回这样的东西:

Python 3.11.2

如果出现错误或打印版本为2.x,则应下载Python 3.x并按照安装说明进行设置。

接下来,初始化一个新的 Python 项目并添加Selenium Python 绑定包:

pip install selenium

Selenium 可以控制许多浏览器,欧博注册但我们将使用 Google Chrome,因为它是最常用的浏览器。确保您安装了最新的 Chrome 版本。

现在,将WebDriver Manager添加到您的项目中:

pip install webdriver-manager

这是一个简化驱动程序管理的 Python 包。详细来说,它可以让您免于每次升级 Chrome 时都下载新的 ChromeDriver 版本。

是时候使用您在 Python 脚本中安装的内容开始使用 Selenium 控制 Chrome 了。下面的代码片段导入工具,初始化实例并使用它来访问示例目标页面。

from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install())) driver.get('https://example.com/')

您刚刚了解了如何在 Python 中开始使用 Selenium。让我们看看如何使用代理!

如何在 Selenium 中设置代理

要在 Selenium 中设置代理,您需要:

检索有效的代理服务器。

在 Chrome 选项中指定它--proxy-server。

访问您的目标页面。

让我们一步步回顾整个过程。

首先,从Free Proxy List获取代理服务器 URL 。然后,配置 Selenium 以使用Options以下标志启动 Chrome --proxy-server:

from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.options import Options # define custom options for the Selenium driver options = Options() # free proxy server URL proxy_server_url = "157.245.97.60" options.add_argument(f'--proxy-server={proxy_server_url}') # create the ChromeDriver instance with custom options driver = webdriver.Chrome( service=ChromeService(ChromeDriverManager().install()), options=options )

Chrome 的受控实例现在将通过指定的代理执行所有请求。

接下来,欧博代理导航到作为目标站点:

driver.get('http://httpbin.org/ip')

注意:此站点将返回请求来自的 IP,这对于本示例来说很方便。

您可以像这样打印目标网页中包含的 JSON 值:

print(driver.find_element(By.TAG_NAME, "body").text)

把它们放在一起:

from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By # define custom options for the Selenium driver options = Options() # free proxy server URL proxy_server_url = "157.245.97.60" options.add_argument(f'--proxy-server={proxy_server_url}') # create the ChromeDriver instance with # custom options driver = webdriver.Chrome( service=ChromeService(ChromeDriverManager().install()), options=options ) # print the IP the request comes from print(driver.find_element(By.TAG_NAME, "body").text)

这是它将返回的内容:

{ "origin": "157.245.97.60" }

站点响应与代理服务器 IP 匹配。这意味着 Selenium 正在根据需要通过代理服务器访问页面。🥳

注意:免费代理是短暂且不可靠的,所以上面代码片段中使用的代理很可能不起作用。我们将在本教程后面看到一个更好的选择。

您现在了解了使用 Python Selenium 代理的基础知识。让我们深入研究更高级的概念!

使用 Python Selenium 进行代理身份验证:用户名和密码

一些代理服务器依靠身份验证来限制对具有有效凭据的用户的访问。商业解决方案或高级代理通常就是这种情况。

在经过身份验证的代理 URL 中指定用户名和密码的语法对于 Selenium 如下所示:

<PROXY_PROTOCOL>://<USERNAME>:<PASSWORD>@<PROXY_IP_ADDRESS>:<PROXY_PORT>

请注意,使用这样的 URL 是--proxy-server行不通的,因为 Chrome 驱动程序默认会忽略用户名和密码。这就是第三方插件(例如Selenium Wire )的用武之地。

它扩展了 Selenium,使您可以访问浏览器发出的请求并根据需要更改它们。启动下面的命令来安装它:

pip install selenium-wire

接下来,使用 Selenium Wire 处理代理身份验证,如下例所示:

from seleniumwire import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By # Selenium Wire configuration to use a proxy proxy_username = 'fgrlkbxt' proxy_password = 'cs01nzezlfen' seleniumwire_options = { 'proxy': { 'http': f'http://{proxy_username}:{proxy_password}@185.199.229.156:7492', 'verify_ssl': False, }, } driver = webdriver.Chrome( seleniumwire_options=seleniumwire_options ) driver.get('http://httpbin.org/ip') print(driver.find_element(By.TAG_NAME, 'body').text) # { "origin": "185.199.229.156" }

注意:此代码可能会导致407: Proxy Authentication Required error. 当凭据不正确时,欧博官网代理服务器会以该 HTTP 状态进行响应,因此请确保代理 URL 包含有效的用户名和密码。

Selenium 代理的最佳协议:HTTP、HTTPS、SOCKS5

在为 Selenium 代理选择协议时,最常见的选项是 HTTP、HTTPS 和 SOCKS5。

HTTP 代理通过 Internet 发送数据,而 HTTPS 代理对其进行加密以提供额外的安全层。这就是为什么后者更受欢迎的原因。

Selenium 代理的另一个有用协议是 SOCKS5,也称为 SOCKS。它支持范围更广的网络流量,包括电子邮件和 FTP,这使其成为一种更加通用的协议。

总体而言,HTTP 和 HTTPS 代理适用于网络抓取和爬网,欧博娱乐SOCKS 在涉及非 HTTP 流量的任务中找到应用程序。

Selenium Grid 中的“错误 403:禁止代理”

Selenium Grid允许您控制远程浏览器并并行运行跨平台脚本。您可能遇到的最常见的错误之一是Error 403: Forbidden for Proxy。发生这种情况有两个原因:

另一个进程已经在端口 4444 上运行。

您没有RemoteWebDriver向正确的 URL 发送请求。

默认情况下,侦听:4444. 因此,如果您有另一个进程在 4444 端口上运行,请结束它或使用另一个端口启动 Selenium Grid。

如果这不能解决问题,请确保将远程驱动程序连接到正确的中心 URL,如下所示:

import selenium.webdriver as webdriver # ... webdriver.Remote('http://localhost:4444/wd/hub', {}) 通过 Python 在 Selenium 中使用旋转代理

如果您的脚本在短时间内发出多个请求,服务器可能会认为它可疑并阻止您的 IP。然而,这不会发生在轮换代理方法中,这是一种涉及在特定时间段或请求数量之后切换代理的技术。

您的最终 IP 将不断变化,使您每次都显示为不同的用户,从而防止服务器禁止您。这就是代理轮换的力量!

是时候学习如何使用selenium-wire.

首先,您必须找到一个代理池。在本例中,我们将使用一些免费代理。

将它们存储在一个数组中,如下所示:

PROXIES = [ 'http://19.151.94.248:88', 'http://149.169.197.151:80', # ... 'http://212.76.118.242:97' ]

然后,提取一个随机代理并用它来初始化一个新的驱动程序实例:

from seleniumwire import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager import random # the list of proxy to rotate on PROXIES = [ 'http://19.151.94.248:88', 'http://149.169.197.151:80', # ... 'http://212.76.118.242:97' ] # randomly extract a proxy random_proxy = random.choice(PROXIES) # set the proxy in Selenium Wire seleniumwire_options = { 'proxy': { 'http': f'{random_proxy}', 'https': f'{random_proxy}', 'verify_ssl': False, }, } # create a ChromeDriver instance driver = webdriver.Chrome( service=ChromeService(ChromeDriverManager().install()), seleniumwire_options=seleniumwire_options ) driver.visit('https://example.com/') # scraping logic... driver.quit() # visit other pages...

每次要访问新页面时重复此逻辑。

做得好!您构建了一个 Selenium 旋转代理。在我们关于如何在 Python 中轮换代理的权威指南中了解更多信息。

但是,大多数请求都会失败,因为免费代理很容易出错。这就是为什么您应该添加带有随机超时的重试逻辑。

但这不是唯一的问题。尝试针对使用反机器人技术的目标测试 IP 旋转器逻辑:

driver.visit('https://www.g2.com/products/asana/reviews')

输出:

medium_G2_access_denied_c25fa90864

medium_G2_access_denied_c25fa90864

目标服务器将旋转代理 Selenium 请求检测为机器人并响应错误403 Unauthorized。

事实上,免费代理大多数时候会让你被封锁。我们使用它们来展示基础知识,但您永远不应该在真实世界的脚本中依赖它们。

哪个代理最适合 Selenium?

如上所示,免费代理是不可靠的,您应该更喜欢高级代理来进行网络抓取。如果您需要了解从哪里获得它们,请查看我们的最佳抓取代理提供商列表。

同时,高级代理并不是最终的解决方案。由于 Selenium 的自动化特性,反抓取技术可以检测并阻止它,即使它与高级代理一起使用也是如此。

避免被阻止的更好选择是 ZenRows。此抓取 API 提供与 Selenium 类似的功能,但成功率更高。与代理公司不同,ZenRows 只对成功的请求收费。这使它成为一种更便宜、更灵活的解决方案。此外,它还消除了设置和维护代理的基础设施难题。

要像在 Selenium 中那样抓取动态网站,您需要选中“JavaScript Rendering”选项。此外,您应该选择Premium Proxy最大匿名选项并避免IP封锁。接下来,选择右侧的Python语言和模式,然后单击“复制到剪贴板”按钮。

medium_Zen_Rows_Dashboard_6258dd6541

medium_Zen_Rows_Dashboard_6258dd6541

注意:通常也建议激活该Anti-bot功能。

现在,安装requests库:

pip install requests

然后,将 Python 代码粘贴到您的脚本中:

import requests proxy = "http://<YOUR_ZENROWS_API_KEY>:[email protected]:8001" proxies = {"http": proxy, "https": proxy} response = requests.get("https://www.g2.com/products/asana/reviews", proxies=proxies, verify=False) print(response.status_code)

这一次,代码片段将返回200,不再是403.

极好的!现在您有了一个具有 Selenium 功能的代理抓取解决方案,但效率更高!

结论

这个分步教程展示了如何使用 Python 在 Selenium 中设置代理。您从基础开始,已成为 Selenium Python 代理高手!

现在你知道了:

什么是 Selenium 代理。

在 Python 中使用 Selenium 设置代理的基础知识。

如何在 Selenium 中处理经过身份验证的代理。

如何实施轮换代理以及为什么这种方法不适用于免费代理。

什么是高级代理以及如何使用它。

相关

文章标签: #python#Selenium

姚伟斌

程序猿

我是姚伟斌,也被称为文景。我的专业领域涵盖了开放源代码的深度探索、网络编程和网络建站。我热衷于分享我的编程和建站实践经验,尤其擅长于Nginx和Proxy服务器的管理。此外,我还对Python和NodeJS这两种编程语言有着深刻的理解和独到的见解。

最近,我致力于爬虫技术的研究,探索如何通过高效的数据抓取为项目增添价值。我的目标是通过持续的学习和创新,为开放源代码社区贡献我的力量,并帮助那些对网络编程和网站建设感兴趣的人士。

文章导航

上一页 上一页

Freeform-适用于Mac用户的自由头脑风暴应用程序

下一步继续

【分享】高质量GPT翻译Prompt,告别“机翻感”

类似文章

如何给Playwright添加代理

如何给Playwright添加代理

Scraping

如何给Playwright添加代理

作者姚伟斌 4 12 月, 202310 8 月, 2023

随着网站实施防止机器人程序的措施…

阅读更多 如何给Playwright添加代理继续

如何绕过Akamai反爬虫风控

如何绕过Akamai反爬虫风控

Scraping

如何绕过Akamai反爬虫风控

作者姚伟斌 25 11 月, 20234 8 月, 2023

Web 抓取是一种古老且仍然常用…

阅读更多 如何绕过Akamai反爬虫风控继续

Python 和 Selenium 中的无头浏览器

Python 和 Selenium 中的无头浏览器

Scraping

Python 和 Selenium 中的无头浏览器

作者姚伟斌 8 12 月, 202312 7 月, 2023

Python 无头浏览器是一种工…

阅读更多 Python 和 Selenium 中的无头浏览器继续

最佳的7个网页抓取语言

最佳的7个网页抓取语言

Scraping

最佳的7个网页抓取语言

作者姚伟斌 24 11 月, 20233 8 月, 2023

采用最好的网络抓取语言会在开发时…

阅读更多 最佳的7个网页抓取语言继续

如何使用Python抓取动态网页数据

如何使用Python抓取动态网页数据

Scraping

如何使用Python抓取动态网页数据

作者姚伟斌 3 11 月, 202318 7 月, 2023

在抓取动态网页内容时,您是否得到…

阅读更多 如何使用Python抓取动态网页数据继续

如何使用cURL绕过Cloudflare

如何使用cURL绕过Cloudflare

Scraping

如何使用cURL绕过Cloudflare

作者姚伟斌 10 11 月, 20234 8 月, 2023

五分之一的网站使用某种形式的 C…

阅读更多 如何使用cURL绕过Cloudflare继续

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2024-09-17 03:09 最后登录:2024-09-17 03:09
栏目列表
推荐内容