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

Scrapy如何定位并提取无class/ID属性的HTML表格内容

Scrapy无class/id属性表格提取方案

你现有代码的核心问题是XPath路径写法规避了当前节点上下文:以//开头的XPath会从整个HTML文档的根节点开始查找,所以哪怕你是从tables[0]的Selector对象调用xpath方法,//tbody依然会返回页面全部的tbody节点,无法定位到单个表格内的内容。

具体实现步骤

1. 修正相对路径查询规则

要从当前选中的table节点下查找子元素,XPath路径开头必须加.,代表基于当前节点上下文查询。比如要取第一个table下的tbody,正确写法是:

first_table_tbody = tables[0].xpath('./tbody')

2. 循环遍历所有表格提取内容

你已经拿到了包含22个表格的Selector列表,直接循环遍历每个表格,在单个表格内用相对路径提取行、单元格内容即可,示例代码如下:

import scrapy

class MatchesSpider(scrapy.Spider):
    name = 'matches'
    allowed_domains = ['laxreports.sportlogiq.com']
    start_urls = ['http://laxreports.sportlogiq.com/nll/GS2200.html']

    def parse(self, response):
        # 已经匹配到页面全部22个table的Selector列表
        tables = response.xpath('//table')
        # 遍历每个表格,table_index是表格的顺序索引(从0开始),可以用来区分不同业务的表格
        for table_index, table in enumerate(tables):
            # 提取当前表格下的所有行(如果页面源码没有tbody标签,直接写./tr即可)
            rows = table.xpath('./tbody/tr')
            # 遍历当前表格的每一行
            for row in rows:
                # 提取当前行所有单元格的文本内容
                cells = row.xpath('./td/text()').getall()
                # 这里可以根据业务逻辑处理单元格内容,比如存储、打印
                yield {
                    'table_index': table_index, # 表格序号,用来区分不同用途的表格
                    'row_content': cells
                }

补充说明

如果需要区分不同表格的业务类型,你可以手动打开目标页面,按从上到下的顺序对应table_index的值,比如table_index=0是赛事总览表、table_index=1是主队球员统计表之类的,按自己的需求过滤处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:39:00