You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:39:56