Scrapy定位表格后无法获取子元素数据,返回空数组求助
问题分析与解决方法
核心问题
你遇到的空数组问题主要来自两个细节错误:
- XPath路径的相对/绝对混淆:循环内使用
//tbody//tr[...]是绝对路径,会从整个HTML文档根节点重新查找,而非当前表格节点下的子元素。 - 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
相关产品推荐
相关产品推荐

