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

如何使用XPath抓取页面指定表格,解决仅能获取首个表格的问题

解决方案

问题根因

  • XPath表达式存在引号嵌套冲突:原代码里XPath字符串外层用了单引号,内层contains(@class, 'xxx')也用了单引号,Python会把字符串截断,导致语法错误,XPath根本没有正常执行
  • 目标站点有基础反爬校验:未携带合法User-Agent请求头时,站点会返回拦截页面,不存在要匹配的表格元素,自然没有返回结果
  • 类名匹配可能存在拼写误差:要匹配的class属性值需要和页面实际渲染的完全一致,拼写错误、大小写错误都会导致匹配失败

完整可运行实现(针对你提供的目标页面)

import requests
import lxml.html as lh

url = "https://biznes.interia.pl/gieldy/notowania-gpw/profil-akcji-mab,wId,6852,tab,przebieg-sesji"
# 加请求头避免被反爬拦截
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

page = requests.get(url, headers=headers)
doc = lh.fromstring(page.content)

# ------------------- 方法1:按索引抓取任意表格 -------------------
# 先获取页面所有表格,索引从0开始计数,要第n个表格就取all_tables[n-1]
all_tables = doc.xpath('//table')
# 比如抓取第2个表格的所有行
target_table = all_tables[1]
tr_elements = target_table.xpath('.//tr')

# ------------------- 方法2:按类名精准定位指定表格 -------------------
# 注意XPath字符串外层用双引号,内层class判断用单引号,避免引号冲突
# tr_elements = doc.xpath("//table[contains(@class, '你要匹配的表格class名')]//tr")

# 输出表格表头
for t in tr_elements[0]:
    name = t.text_content().strip()
    print(name)

使用说明

如果你不清楚表格的索引或者类名,可以先打印所有表格的class属性和对应索引,确认你要抓取的目标表格特征:

for idx, table in enumerate(all_tables):
    print(f"表格索引:{idx},class属性:{table.get('class')}")

匹配class时如果要完全匹配而非包含,可以把contains(@class, 'xxx')换成@class='xxx'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:12:03