Selenium和Playwright爬虫示例
既然你提到了 Selenium 和 Playwright,这说明你面对的网页可能存在动态加载、登录校验或者复杂的 JavaScript 交互。
这两者都是通过驱动浏览器内核(Chromium, Firefox 等)来实现模拟的,但 Playwright 是目前更现代、更推荐的选择,而 Selenium 则是行业的老牌标准。
1. Selenium 示例
Selenium 适合习惯经典自动化测试框架的开发者。
准备工作:pip install selenium(通常还需要下载对应的 WebDriver,如 ChromeDriver)。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import time
# 1. 配置浏览器(可选:添加无头模式)
options = webdriver.ChromeOptions()
# options.add_argument('--headless')
# 2. 启动驱动
driver = webdriver.Chrome(options=options)
try:
# 3. 访问网页
driver.get("https://www.baidu.com")
# 4. 模拟交互:定位输入框并搜索
search_box = driver.find_element(By.ID, "kw")
search_box.send_keys("Python 爬虫")
search_btn = driver.find_element(By.ID, "su")
search_btn.click()
# 等待页面加载
time.sleep(3)
# 5. 获取结果
print("当前页面标题是:", driver.title)
finally:
driver.quit() # 记得关闭浏览器
2. Playwright 示例(推荐)
Playwright 由微软开发,支持异步处理,且不需要手动管理驱动文件,它的等待机制(Auto-wait)比 Selenium 更智能。
准备工作:pip install playwrightplaywright install (安装浏览器内核)
from playwright.sync_api import sync_playwright
def run():
with sync_playwright() as p:
# 启动 Chromium 浏览器
browser = p.chromium.launch(headless=False) # 改为 True 则不弹出窗口
context = browser.new_context(
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ..."
)
page = context.new_page()
# 1. 访问网页
page.goto("https://www.bing.com")
# 2. 交互:等待输入框出现并输入
page.fill('input[name="q"]', 'Playwright Python')
page.press('input[name="q"]', 'Enter')
# 3. 智能等待:等待特定的选择器加载出来
page.wait_for_selector('.b_algo')
# 4. 提取数据
titles = page.locator('.b_algo h2').all_inner_texts()
for i, title in enumerate(titles[:5]):
print(f"结果 {i+1}: {title}")
# 5. 截图留存
page.screenshot(path="search_result.png")
browser.close()
run()
Selenium vs Playwright:核心区别
| 特性 | Selenium | Playwright |
|---|---|---|
| 等待机制 | 需要手动设置 WebDriverWait | 自动等待(元素可见、可点击才操作) |
| 速度 | 较慢(基于 HTTP 协议通信) | 极快(基于 WebSocket 协议) |
| 录制功能 | 依赖插件 | 自带 codegen(直接生成代码) |
| 异步支持 | 不原生支持 | 原生支持 asyncio |
| 环境搭建 | 需手动配 WebDriver | 一个命令自动安装所有内核 |
进阶建议:如何选择?
- 如果你是新手: 尝试 Playwright。它的录制功能非常强大,你只需要在终端输入
playwright codegen [网址],它会弹出一个浏览器,你点击网页的动作会自动生成对应的 Python 代码。 - 如果你在维护老项目: 大概率会遇到 Selenium,它的社区资源(如 StackOverflow 的解答)是最丰富的。
- 如何避开反爬: * 隐藏特征: 许多网站会检测
window.navigator.webdriver。对于 Playwright,可以使用playwright-stealth插件来隐藏自动化特征。 - 无头模式: 虽然
headless=True运行快,但有些网站会针对无头浏览器进行封锁,必要时建议使用有界面运行。