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

Scrapy定位表格后无法获取子元素数据,返回空数组求助

问题分析与解决方法

核心问题

你遇到的空数组问题主要来自两个细节错误:

  1. XPath路径的相对/绝对混淆:循环内使用//tbody//tr[...]是绝对路径,会从整个HTML文档根节点重新查找,而非当前表格节点下的子元素。
  2. XPath语法错误:position()>2and position()<23里的and前后没有空格,属于语法错误,导致XPath解析失败。

额外注意点

部分浏览器会自动给表格补全<tbody>标签,但原页面的HTML源码里可能并没有这个标签,直接用//tr定位表格行更稳妥。

修正后的代码

class MarketDataSpider(scrapy.Spider):
    name = "nepse_floorsheet"

    def start_requests(self):
        url = 'http://www.nepalstock.com/main/floorsheet/index/0/'
        yield scrapy.Request(url, callback=self.parse)

    def parse(self, response):
        # 定位目标表格
        table = response.xpath("//table[@class='table my-table']")
        if not table:
            return
        # 用相对路径定位表格内的目标行,修复语法错误
        target_rows = table.xpath(".//tr[position() > 2 and position() < 23]")
        for row in target_rows:
            # 示例:提取每行第一列文本,可根据需求扩展
            item = {}
            item['first_col'] = row.xpath("./td[1]/text()").get()
            print(item)
            # yield item  # 若要持久化数据,取消注释该行

关键修正说明

  • 子XPath前加.:.//tr[...]表示相对于当前表格节点查找子元素,而非全局查找。
  • 修复and前后的空格:position() > 2 and position() < 23符合XPath语法规范。
  • 增加表格存在性判断:避免后续代码因未找到表格而抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:40:26