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

Scrapy中使用CSS/XPath选择器无法找到HTML元素的问题

问题原因及解决办法

你遇到的情况是目标内容由JavaScript动态渲染生成,Scrapy默认请求获取的是服务器返回的静态HTML,没有执行页面中的JS,所以看不到浏览器里显示的data1类div元素。

验证方法

在Scrapy Shell里执行 print(response.text),搜索是否包含data1,如果找不到,就确认是动态加载的问题。

解决步骤

1. 安装依赖

需要用scrapy-playwright让Scrapy支持JS渲染:

pip install scrapy-playwright
playwright install chromium

2. 配置Scrapy项目的settings.py

添加以下配置:

DOWNLOAD_HANDLERS = {
    "http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
    "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler",
}

PLAYWRIGHT_LAUNCH_OPTIONS = {
    "headless": True,  # 调试时可设为False查看浏览器窗口
    "timeout": 30000,
}

3. 启用JS渲染获取内容

  • 爬虫代码中发起请求时添加meta参数:
yield scrapy.Request(url=你的目标URL, meta={"playwright": True})
  • Scrapy Shell测试时,用以下命令启动并渲染:
scrapy shell -s DOWNLOAD_HANDLERS='{"http": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler", "https": "scrapy_playwright.handler.ScrapyPlaywrightDownloadHandler"}' 你的目标URL

然后在Shell中执行:

response = await response.follow(你的目标URL, meta={"playwright": True})

之后再用 response.css('div.data1') 或 response.xpath('//div[@class="data1"]') 就能获取到目标元素了。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:27:29