如何在 Python 中将代理与 SeleniumBase 一起使用
在本指南中,我将说明如何在 Python 中为 SeleniumBase 设置代理。通过这种方法,你的网页抓取会变得更高效、更可靠,让你能够绕过常见障碍,并顺利收集所需数据。
什么是 SeleniumBase?
SeleniumBase 是一个构建在 Selenium WebDriver 之上的框架,提供增强的网页自动化功能。它通过提供用于管理浏览器交互的工具,简化浏览器自动化、测试和网页抓取。它非常适合创建端到端测试套件,以及执行涉及复杂浏览器交互的网页抓取任务,例如处理弹窗、表单提交和动态内容加载。
为什么在网页抓取中使用代理?
网站通常会限制单个 IP 在短时间内可发出的请求数量。如果你的脚本发送了过多请求,网站可能会屏蔽该 IP 地址。使用代理可以通过以下方式帮助你避免这种情况:
IP 轮换: 定期更换 IP 地址,让请求看起来来自不同来源。
地理定位: 使用来自特定位置的代理,访问仅限某些地区的内容。
匿名性: 隐藏你的 IP 地址,避免被标记为机器人。
与 SeleniumBase 搭配使用的最佳代理服务
知道如何在 SeleniumBase 中设置代理还不够。我想在这里介绍一些最可靠的代理服务,重点是住宅代理。住宅代理让你可以轻松管理轮换,并且是网页抓取中最安全的 IP 类型。
Bright Data — 最大的提供商、精准定位、代理管理工具,起价 $5.04/GB
Oxylabs — 庞大的网络、精准定位、专属支持,起价 $4/GB
Smartproxy — 大型代理池、广泛地区覆盖、自助服务,起价 $2.2/GB
Webshare — 自定义选项、自助服务、价格实惠,起价 $4.5/GB
SOAX — 灵活轮换、精准定位、24/7 支持,起价 $2.2/GB
可在这里阅读更详细的内容。我与这些提供商均无关联 :)
设置 SeleniumBase
在使用 SeleniumBase 之前,请确保你的机器上已安装 Python。按照以下步骤设置 SeleniumBase:
通过 pip 安装 SeleniumBase:
pip install seleniumbase
安装网页浏览器驱动。
对于 Chrome,你可以安装 ChromeDriver:
seleniumbase install chromedriver
验证安装:
运行一个简单命令,检查 SeleniumBase 是否已正确安装。
sbase verify
在 SeleniumBase 中使用代理
要配置 SeleniumBase 代理,你必须将代理详细信息传递给浏览器会话。SeleniumBase 允许通过修改浏览器选项来设置代理。下面是以不同方式配置代理的步骤:
为单个请求设置代理
你可以在设置浏览器时指定代理服务器,为一次性请求配置代理。下面是一个基本示例:
from seleniumbase import BaseCaseclass ProxyTest(BaseCase):def test_with_proxy(self):# Specify the proxy serverproxy = "http://your_proxy_ip:port"# Add proxy optionschrome_options = {"proxy": {"httpProxy": proxy,"sslProxy": proxy,"proxyType": "MANUAL",}}# Open the browser with proxy settingsself.open("http://example.com", chrome_options=chrome_options)# Verify the page title or other actionsself.assert_title("Example Domain")
将“your_proxy_ip:port”替换为你的代理服务器 IP 地址和端口。
动态代理
对于较大的抓取项目,你可能需要轮换代理以避免被检测。下面介绍如何使用代理列表,并在每次请求之间切换代理:
import randomfrom seleniumbase import BaseCaseclass RotatingProxyTest(BaseCase):def test_with_rotating_proxies(self):# List of proxiesproxies = ["http://proxy1_ip:port","http://proxy2_ip:port","http://proxy3_ip:port"]# Choose a random proxy from the listproxy = random.choice(proxies)# Add proxy optionschrome_options = {"proxy": {"httpProxy": proxy,"sslProxy": proxy,"proxyType": "MANUAL",}}# Open the browser with proxy settingsself.open("http://example.com", chrome_options=chrome_options)# Perform actions as neededself.assert_title("Example Domain")
采用这种方法,脚本会为每次请求从列表中选择不同的代理,从而帮助最大限度降低被检测的风险。
使用受身份验证保护的代理
如果你的代理需要身份验证,则必须在使用代理之前设置凭据。下面是操作方法:
from selenium.webdriver import ChromeOptionsfrom seleniumbase import BaseCaseclass AuthProxyTest(BaseCase):def test_with_auth_proxy(self):# Set proxy and credentialsproxy = "proxy_ip:port"username = "your_username"password = "your_password"# Setup Chrome optionschrome_options = ChromeOptions()chrome_options.add_argument(f' - proxy-server={proxy}')# Bypass proxy authentication using a Chrome extensionchrome_options.add_extension('proxy_auth_plugin.zip')# Open browser with optionsself.driver = self.get_new_driver(chrome_options=chrome_options)self.open("http://example.com")# Check some conditionself.assert_title("Example Domain")
上述代码使用 Chrome 扩展来处理代理身份验证,这需要创建一个包含凭据的扩展文件(proxy_auth_plugin.zip)。
将代理与 SeleniumBase 一起使用时的挑战和最佳实践
使用代理并非没有挑战。以下是一些在网页抓取中充分利用代理的技巧和策略:
避免使用免费代理: 免费代理通常不可靠、速度慢,并且可能已经被网站标记。投资信誉良好的付费代理服务,以获得更好的结果。
监控代理健康状况: 定期检查代理状态,确保它们按预期工作。
随机化请求时间: 在请求之间添加随机延迟,而不是一次性全部发送,以降低被屏蔽的风险。
谨慎使用无头模式: 虽然使用无头模式可能会加快抓取速度,但也可能增加被标记为机器人的可能性。请谨慎使用,并将其与用户代理伪装等其他技术结合起来。
处理 CAPTCHA 挑战: 如果网站显示 CAPTCHA 挑战,你可能需要集成 CAPTCHA 破解服务。
使用代理进行抓取的其他技术
将代理使用与其他技术结合起来,可以让你的抓取工作更高效。以下是一些高级策略:
用户代理伪装: 随机化 user-agent 字符串,以模拟来自不同浏览器或设备的请求。
会话管理: 有效管理 Cookie 和会话,避免触发反机器人机制。
无头浏览器设置: 使用无头浏览器在不显示图形界面的情况下进行抓取,但要修改浏览器指纹设置以避免被检测。
结论
代理是绕过反抓取措施并高效收集数据的强大工具。使用 SeleniumBase 配置代理非常直接,无论你是需要用于测试的单个代理,还是用于大规模抓取的轮换系统。请记住遵循最佳实践,并持续监控代理性能。将代理与用户代理伪装、会话管理等技术结合起来,可以最大限度减少障碍,并收集你所需的数据。
可在这里了解用于网页抓取的用户代理。还有其他问题吗?欢迎在评论中告诉我!感谢阅读 :)
对其他网页抓取指南感兴趣?
如需阅读其他精彩文章,请访问我的个人主页 — Data Journal ❤️