2025 年使用 SeleniumBase 和 Python 进行网络抓取
在本文中,我将向您介绍 SeleniumBase 的 SeleniumBase 的主要功能,向你展示如何使用它进行搜索,并分享一些应对当今网络挑战的实用技巧。无论你是新手还是想提高水平,SeleniumBase 都能为你提供直接的入门方法。
什么是 SeleniumBase?
SeleniumBase 是建立在 Selenium 基础上的开源 Python 框架,旨在简化网络自动化任务,包括测试和刮擦。与通常需要大量模板代码的标准 Selenium 不同,SeleniumBase 通过内置的数据提取、交互自动化和反僵尸规避工具,最大限度地减少了重复编码。
替代解决方案 - 自动网络抓取工具
如果您需要使用先进的反抓取技术进行大规模或复杂网站的抓取,我建议您尝试使用我公司的以下网络抓取工具之一:
- Bright Data - 最适合高级搜索;具有广泛的代理管理和可靠的应用程序接口。
- Octoparse - 用户友好的无代码工具,用于从网站自动提取数据。
- ScrapingBee - 面向开发人员的应用程序接口,可高效处理代理、浏览器和验证码。
- Scrapy - 开源 Python 框架是数据抓取和刮擦任务的理想选择。
- ScraperAPI - 利用先进的反僵尸技术处理棘手的刮擦问题;非常适合开发人员使用。
- Apify - 多功能平台提供现成的刮刀和强大的刮削能力。
要了解每项服务的更多信息,我建议您阅读 我关于网络搜索工具的完整文章.
现在,让我们开始安装 SeleniumBase。
设置 SeleniumBase
在开始网络刮擦之前,你需要在系统中设置 SeleniumBase。具体方法如下
安装 Python:确保已安装 Python。如果没有,请从官方 Python 网站.
安装 SeleniumBase:使用以下命令通过 pip 安装 SeleniumBase:
pip3 install seleniumbase
安装 WebDriver:SeleniumBase 负责管理 WebDriver 的安装,但你也可以手动下载并将其放在 PATH 中。
验证安装:为确保 SeleniumBase 设置正确,请运行以下命令查看可用选项:
seleniumbase - help
现在你已经安装了 SeleniumBase,让我们来创建一个基本的刮板。
使用 SeleniumBase 构建基本的抓取器
使用 SeleniumBase 创建一个简单的网页抓取器需要设置一个 Python 脚本来与网页交互。在本示例中,我们将从一个电子商务演示网站中抓取产品详细信息。
下面是制作基本刮刀的分步指南:
创建名为 scraper.py 的新文件 项目目录中的
编写以下代码 提取目标页面的全部 HTML 内容:
from seleniumbase import BaseCase
class Scraper(BaseCase):
def test_get_html(self):
self.open("https://www.scrapingcourse.com/ecommerce/")
page_html = self.get_page_source()
print(page_html)
运行刮刀 使用 pytest 命令:
pytest scraper.py -s
上述代码打开电子商务页面并提取 HTML,然后将其打印到终端。这为执行更复杂的搜索任务奠定了基础。
提取特定数据
为了让刮板更有用,您通常需要定位特定元素,如产品名称、图片和 URL。SeleniumBase 支持 CSS 选择器、XPath 和 ID 来定位元素。下面介绍如何提取不同类型的信息:
搜索产品名称
识别产品名称的 HTML 结构,在本例中,产品名称位于 h2 标签内,并带有 product-name 类别。下面的代码演示了如何抓取产品名称:
from seleniumbase import BaseCase
class Scraper(BaseCase):
def test_get_product_names(self):
self.open("https://www.scrapingcourse.com/ecommerce/")
product_names = self.find_elements("h2.product-name")
names = [product.text for product in product_names]
print(names)
抓取产品图片
要抓取图片 URL,请找到带有 product-image 类的 img 标记。以下代码可提取图片 URL:
from seleniumbase import BaseCase
class Scraper(BaseCase):
def test_get_image_urls(self):
self.open("https://www.scrapingcourse.com/ecommerce/")
image_elements = self.find_elements("img.product-image")
image_urls = [image.get_attribute("src") for image in image_elements]
print(image_urls)
搜索产品链接
同样,从带有类 woocommerce-LoopProduct-link 的标签中提取产品 URL:
from seleniumbase import BaseCase
class Scraper(BaseCase):
def test_get_product_links(self):
self.open("https://www.scrapingcourse.com/ecommerce/")
link_elements = self.find_elements("a.woocommerce-LoopProduct-link)
links = [link.get_attribute("href") for link in link_elements]
print(links)
浏览器交互自动化
在某些情况下,仅刮擦静态内容是不够的,尤其是对于动态加载内容或需要用户交互的网站。SeleniumBase 支持一系列浏览器操作,包括点击、滚动和表单提交。
示例:自动提交表格
假设一个网站需要登录凭证。下面是一个用于登录和抓取内容的脚本:
from seleniumbase import BaseCase
class Scraper(BaseCase):
def test_login_and_scrape(self):
self.open("https://www.scrapingcourse.com/login")
self.type("#email", "[email protected]")
self.type("#password", "password")
self.click("button[type='submit']")
self.save_screenshot("after_login.png")
该脚本会填写登录信息、提交表单,并在登录后截取屏幕截图。save_screenshot 函数有助于确认刮擦程序是否能正确浏览网站。
避免反机器人措施
网站通常会使用各种反机器人措施,例如验证码、IP 屏蔽或 JavaScript 挑战。SeleniumBase 包含的功能有助于绕过其中一些措施,但也有局限性。
使用统一通信模式
SeleniumBase 的 UC(未检测到的 ChromeDriver)模式允许刮擦程序通过修改浏览器指纹来模仿真实用户行为。下面介绍如何启用它:
from seleniumbase import Driver
class Scraper(BaseCase):
def test_bypass_bot_protection(self):
driver = Driver(uc=True)
司机open("https://www.scrapingcourse.com/antibot-challenge")
driver.uc_gui_click_captcha()
page_html = driver.get_page_source()
print(page_html)
driver.quit()
该脚本使用 UC 模式绕过僵尸检测并处理验证码挑战。请注意,虽然 UC 模式可以帮助躲避检测,但并非万无一失,尤其是对于高度复杂的反僵尸系统而言。
代理配置
使用代理可以通过轮换 IP 地址来防止 IP 禁用。SeleniumBase 允许你配置代理以增强匿名性:
pytest scraper.py - proxy=IP:PORT - proxy-type=http
此命令将设置一个代理服务器,SeleniumBase 将使用该代理服务器处理刮擦会话中的所有请求。
先进技术和最佳实践
要使你的网络搜刮工具更强大、更不容易被阻止,请遵循以下最佳实践:
- 使用随机延迟: 在操作之间引入随机睡眠时间间隔,以模拟人类的浏览模式。
- 轮换用户代理: 更改用户代理字符串,以模拟不同的设备和浏览器。
- 处理 JavaScript 渲染: 使用 self.wait_for_element 来确保在扫描前加载所有动态内容。
- 尊重 Robots.txt 文件: 请务必检查网站的 robots.txt 文件,以了解哪些部分允许进行刮擦。
硒库的局限性
SeleniumBase 功能强大,但也有一些缺点:
- 无头模式下的检测 有些网站可以检测到无头浏览器。
- 规模限制: 由于速度限制,它不适合在众多页面中搜索大量数据。
- 反机器人适应 作为一款开源工具,反机器人开发人员可以更新其算法来检测 SeleniumBase。
结论
使用 SeleniumBase 进行网络刮擦是一种灵活而强大的方法,可用于收集数据、自动执行任务以及与网站交互。我觉得它特别吸引人,因为它简单易用,并提供强大的自动化功能,是初学者和经验丰富的开发人员的理想选择。虽然存在一些挑战,比如反僵尸检测和扩展限制,但使用 UC 模式和代理设置等智能策略可以大大提高成功率。
如果你想认真对待网络搜刮,学习 SeleniumBase 是必须的。随着自动化工具的不断发展,能够适应和使用这些框架是在瞬息万变的网络刮削世界中保持领先的关键。