在上篇基础上,我们已经完成了基本的调度器 ➡ Worker ➡ 存储系统的搭建。本节将继续升级,让系统更加健壮、高效、可视化!
1. 提升性能:异步批量写入 MongoDB
为什么需要批量写?
- 单条
insert_one()
插入,频繁建立连接,效率低。 - 批量
insert_many()
,可以大幅减少 IO 次数,提高爬虫整体吞吐量。
如何改造 Worker?
在 Worker 内部,缓存抓取到的页面数据,每攒够 10条 或 达到 5秒,就统一批量写入。
核心改造版 Worker 示例:
import asyncio
import redis
from playwright.async_api import async_playwright
from motor.motor_asyncio import AsyncIOMotorClient # 异步版 MongoDB 客户端BATCH_SIZE = 10
FLUSH_INTERVAL = 5 # 秒async def fetch_page(url):async with async_playwright() as p:browser = await p.chromium.launch(headless=True)page = await browser.new_page()await page.goto(url)title = await page.title()html_content = await page.content()await browser.close()return {'url': url