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

Scrapy爬取维基百科IMF名义GDP列表:Yield仅返回首行数据求助

解决Scrapy爬取维基GDP表格仅获取第一行数据的问题

问题原因

你的代码存在两个核心问题:

  1. 循环对象错误:你将(//tbody)[3]这个单个tbody节点作为循环对象,导致循环仅执行一次,get()方法只能提取该tbody下第一个<td[3]>的文本。
  2. getall()的使用误区:getall()会返回所有匹配文本组成的列表,导出CSV/XLSX时,整个列表会被当作单个单元格内容,不符合逐行存储的需求。

修正方案

先定位到IMF表格tbody下的所有数据行(<tr>),再循环遍历每一行提取对应GDP值:

def parse(self, response):
    # 定位IMF统计数据对应的tbody节点
    imf_table = response.xpath("(//tbody)[3]")
    # 遍历tbody下的每一行数据
    for row in imf_table.xpath(".//tr"):
        # 提取当前行第3个td的文本,去除首尾空白
        gdp = row.xpath(".//td[3]/text()").get()
        # 过滤空值行,避免导出无效数据
        if gdp:
            yield {"GDP": gdp.strip()}

代码说明

  • imf_table.xpath(".//tr"):获取IMF表格下的所有数据行,确保循环遍历每一条数据。
  • row.xpath(".//td[3]/text()").get():针对每一行单独提取第3个单元格的文本,每次返回单个值,导出CSV时会自动按行拆分存储。
  • 空值判断:过滤表格中可能存在的空行或无数据的行,保证导出数据的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:01:01