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 seleniumSelenium 可以控制许多浏览器,欧博注册但我们将使用 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')输出: 目标服务器将旋转代理 Selenium 请求检测为机器人并响应错误403 Unauthorized。 事实上,免费代理大多数时候会让你被封锁。我们使用它们来展示基础知识,但您永远不应该在真实世界的脚本中依赖它们。 哪个代理最适合 Selenium?如上所示,免费代理是不可靠的,您应该更喜欢高级代理来进行网络抓取。如果您需要了解从哪里获得它们,请查看我们的最佳抓取代理提供商列表。 同时,高级代理并不是最终的解决方案。由于 Selenium 的自动化特性,反抓取技术可以检测并阻止它,即使它与高级代理一起使用也是如此。 避免被阻止的更好选择是 ZenRows。此抓取 API 提供与 Selenium 类似的功能,但成功率更高。与代理公司不同,ZenRows 只对成功的请求收费。这使它成为一种更便宜、更灵活的解决方案。此外,它还消除了设置和维护代理的基础设施难题。 要像在 Selenium 中那样抓取动态网站,您需要选中“JavaScript Rendering”选项。此外,您应该选择Premium Proxy最大匿名选项并避免IP封锁。接下来,选择右侧的Python语言和模式,然后单击“复制到剪贴板”按钮。 注意:通常也建议激活该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,告别“机翻感”
类似文章
Scraping 如何给Playwright添加代理作者姚伟斌 4 12 月, 202310 8 月, 2023
随着网站实施防止机器人程序的措施…
阅读更多 如何给Playwright添加代理继续
Scraping 如何绕过Akamai反爬虫风控作者姚伟斌 25 11 月, 20234 8 月, 2023
Web 抓取是一种古老且仍然常用…
阅读更多 如何绕过Akamai反爬虫风控继续
Scraping Python 和 Selenium 中的无头浏览器作者姚伟斌 8 12 月, 202312 7 月, 2023
Python 无头浏览器是一种工…
阅读更多 Python 和 Selenium 中的无头浏览器继续
Scraping 最佳的7个网页抓取语言作者姚伟斌 24 11 月, 20233 8 月, 2023
采用最好的网络抓取语言会在开发时…
阅读更多 最佳的7个网页抓取语言继续
Scraping 如何使用Python抓取动态网页数据作者姚伟斌 3 11 月, 202318 7 月, 2023
在抓取动态网页内容时,您是否得到…
阅读更多 如何使用Python抓取动态网页数据继续
Scraping 如何使用cURL绕过Cloudflare作者姚伟斌 10 11 月, 20234 8 月, 2023
五分之一的网站使用某种形式的 C…
阅读更多 如何使用cURL绕过Cloudflare继续 (责任编辑:) |