1. 为什么需要 Playwright
传统 requests 无法执行 JavaScript。Playwright 支持 Chromium、Firefox、WebKit,能模拟真实浏览器。
安装:
bash
复制
下载
pip install playwright playwright install
2. 基本用法
python
复制
下载
from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto("https://example.com") print(page.title()) browser.close()3. 异步 Playwright
python
复制
下载
import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser = await p.chromium.launch(headless=True) page = await browser.new_page() await page.goto("https://example.com") title = await page.title() print(title) await browser.close() asyncio.run(main())4. 等待元素与提取数据
python
复制
下载
await page.wait_for_selector(".item") items = await page.query_selector_all(".item") for item in items: text = await item.inner_text() print(text)5. 处理登录与 Cookie
python
复制
下载
await page.fill("#username", "user") await page.fill("#password", "pass") await page.click("#login") await page.wait_for_url("**/dashboard") cookies = await page.context.cookies()6. 反爬策略
设置 User-Agent:
python
复制
下载
await browser.new_page(user_agent="Mozilla/5.0 ...")
使用代理:
python
复制
下载
browser = await p.chromium.launch(proxy={"server": "http://127.0.0.1:7890"})随机延迟:
python
复制
下载
await asyncio.sleep(random.uniform(1, 3))
模拟人类操作:随机滚动、鼠标移动。
7. 验证码处理
简单验证码可使用 OCR,如ddddocr:
python
复制
下载
import ddddocr ocr = ddddocr.DdddOcr() code = ocr.classification(image_bytes)
复杂验证码建议使用打码平台或人工处理。
8. 并发爬虫架构
使用 asyncio + Playwright:
python
复制
下载
async def crawl(url, browser, sem): async with sem: page = await browser.new_page() try: await page.goto(url, timeout=30000) return await page.title() finally: await page.close() async def main(urls): async with async_playwright() as p: browser = await p.chromium.launch() sem = asyncio.Semaphore(5) tasks = [crawl(url, browser, sem) for url in urls] results = await asyncio.gather(*tasks) await browser.close() return results
9. 常见坑
无头模式被检测,可尝试
headless=False或 stealth 插件。页面未加载完就提取,需使用
wait_for_selector。代理不稳定导致超时。
频繁请求触发 IP 封禁。
10. 总结
Playwright 是动态网页爬虫的利器。结合异步、代理和限流,可以构建稳定高效的数据采集系统。务必遵守目标网站 robots.txt 和法律法规。