You need to enable JavaScript to run this app. Scrapy无法从指定class的nav标签提取文本,返回空列表如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy无法从指定class的nav标签提取文本,返回空列表如何解决

问题排查与解决方法

1 基础配置错误修正

你当前代码的allowed_domains配置不符合Scrapy规范,该参数仅需填写域名,不需要带协议头,修正为:

allowed_domains = ['ab.gr']

2 XPath逻辑错误说明

你当前使用的//nav[@class="hotspots layer active"]/text()是提取该nav节点的直接文本内容,而目标节点本身没有直接文本,返回空属于正常结果。你需要提取子节点a标签的aria-label属性,对应XPath应修改为:

//nav[contains(@class,"hotspots layer active")]//a/@aria-label

这里用contains匹配class是避免页面渲染时class顺序变化导致匹配失效。

3 动态内容加载问题处理

你用Scrapy、Selenium都拿不到节点的核心原因是该页面的宣传页热点数据为异步加载,且依赖前端渲染生成对应DOM节点:

  • 优先方案:直接抓后端接口拿数据。打开浏览器F12控制台刷新页面,筛选Fetch/XHR类型请求,查找返回热点数据的接口(通常带有leaflet、hotspot关键词),直接请求接口解析JSON即可,不需要解析前端DOM,效率更高。
  • 若坚持用Selenium解析DOM:添加显式等待逻辑,等待目标nav节点渲染完成后再执行XPath匹配,示例逻辑如下:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 省略驱动初始化代码
wait = WebDriverWait(driver, 10)
nav_node = wait.until(EC.presence_of_element_located((By.XPATH, '//nav[contains(@class,"hotspots layer active")]')))
aria_labels = nav_node.find_elements(By.XPATH, './/a')
for item in aria_labels:
    print(item.get_attribute('aria-label'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 02:54:01