如何阻止Playwright加载非文本资源?Scrapy爬虫优化求助
解决Scrapy+Playwright禁止加载非文本资源的问题
核心方案:通过Playwright请求拦截阻止资源加载
Scrapy的原生配置对Playwright驱动的浏览器无效,必须直接在Playwright的页面上下文里配置请求拦截规则,精准过滤图片、字体、样式等非必要资源。
1. 在爬虫代码中添加请求拦截逻辑
在Spider类的请求初始化阶段,通过PageCoroutine绑定拦截方法:
from scrapy_playwright.page import PageCoroutine import logging class TargetSpider(scrapy.Spider): name = "target_spider" def start_requests(self): yield scrapy.Request( url="你的目标URL", meta={ "playwright": True, "playwright_page_coroutines": [ PageCoroutine("route", "**/*", self.block_unwanted_resources), ], }, ) async def block_unwanted_resources(self, route, request): # 定义需要拦截的资源类型 blocked_types = {"image", "font", "stylesheet", "media"} # 如果需要保留页面渲染必需的JS,不要拦截script类型 if request.resource_type in blocked_types: logging.info(f"拦截资源:{request.url}(类型:{request.resource_type})") await route.abort() else: await route.continue_()
2. 补充Settings.py配置(辅助优化)
虽然核心拦截靠Playwright,但可以通过Scrapy配置减少冗余处理:
# settings.py # 禁用Scrapy媒体下载管道 ITEM_PIPELINES = {} # 禁止所有媒体文件下载 MEDIA_ALLOWED_EXTENSIONS = set() # 按需禁用Cookie(如果页面不需要登录或会话) COOKIES_ENABLED = False
3. 验证拦截效果
运行爬虫时,通过日志可以看到被拦截的资源记录,确认规则生效。如果仍有资源加载,检查以下几点:
- 确认
scrapy-playwright是最新版本,旧版本对routeAPI支持可能存在问题 - 核对Playwright的资源类型枚举值:
document,stylesheet,script,image,font,media,xhr等,确保拦截类型正确 - 若页面依赖JS渲染文本,不要拦截
script类型
内容的提问来源于stack exchange,提问作者hafiz031
相关产品推荐
相关产品推荐

