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

使用XPath解析未闭合标签HTML时Python代码返回空列表的问题排查

问题解决:Python XPath解析学科列表返回空的修复方案

核心问题排查

  1. 语法低级错误:代码里category==content.xpath(...)用了双等号(比较运算符),应该改成单等号(赋值运算符),否则category会变成布尔值而非列表。
  2. XPath匹配失效:直接用text()="Area of Study"匹配h3标签容易失败,因为网页中该标签的文本可能包含空格、换行或被其他节点嵌套,导致精确匹配不生效。
  3. 请求头缺失:目标网站可能会拦截无标识的爬虫请求,返回的内容和预期不一致,导致节点无法定位。
  4. 未闭合标签影响:虽然lxml的fromstring能容错未闭合<li>,但解析后的节点结构可能和预期有偏差,需要调整XPath适配。

修正后的代码

import requests
from lxml import html

# 添加请求头模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

url = r'https://universitystudy.ca/search-programs/?k=&program_level_merged=&program_language=ENGLISH'

# 发送请求并解析内容
resp = requests.get(url, headers=headers)
content = html.fromstring(resp.content)

# 调整XPath,用normalize-space处理文本空格,确保匹配到目标h3
categories = content.xpath('//h3[normalize-space(text())="Area of Study"]/following-sibling::ul//li/a/text()')

# 输出结果
for cat in categories:
    print(cat.strip())

预期获取的中文列表

  • 工商管理通用方向(520)
  • 计算机科学(289)
  • 数学通用方向(279)
  • 心理学通用方向(277)
  • 经济学通用方向(250)
  • 生物学/生物科学通用方向(249)
  • 地理学(241)
  • 英语语言文学通用方向(240)
  • 化学通用方向(220)
  • 政治学与政府学通用方向(211)
  • 历史学通用方向(200)

内容的提问来源于stack exchange,提问作者chariots of fire

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:26:04