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

使用Jsoup提取BBC足球新闻正文时出现选择器解析错误的原因

Jsoup选择器解析失败的原因及解决方法

问题背景

使用Jsoup提取BBC足球新闻正文时,编写的选择器无法被解析,抛出SelectorParseException异常。代码中尝试通过包含特殊字符的类名定位div标签,选择器语句为:

div.qa-story-body.story-body.gel-pica.gel-10/12@m.gel-7/8@l.gs-u-ml0@l.gs-u-pb++ span

解析失败的核心原因

Jsoup遵循CSS选择器语法规则,而你使用的类名中包含/和++这类CSS选择器特殊字符:

  • /在CSS选择器中用于表示父子元素关系(如div/p),解析器遇到gel-10/12@m里的/时,会误将其当成选择器语法的分隔符,导致解析流程中断。
  • ++属于CSS选择器的特殊符号,同样会被解析器识别为语法指令,而非类名的组成部分。

这种情况下,解析器无法正确识别这些带特殊字符的类名,直接抛出解析异常。

可行的解决方法

1. 使用属性选择器匹配完整class属性

通过[class="完整类名"]的方式直接匹配div的class属性值,绕开特殊字符的解析问题:

Elements spans = document.select("div[class=\"qa-story-body story-body gel-pica gel-10/12@m gel-7/8@l gs-u-ml0@l gs-u-pb++\"] span");

2. 转义特殊字符

对类名中的特殊字符用\转义(Java字符串中需要写双反斜杠\\),让解析器将其视为类名的一部分:

Elements spans = document.select("div.qa-story-body.story-body.gel-pica.gel-10\\/12@m.gel-7\\/8@l.gs-u-ml0@l.gs-u-pb\\+\\+ span");

3. 简化选择器(推荐)

如果qa-story-body是新闻正文div独有的类名,可以直接用这个类定位,无需带上所有复杂类名:

Elements spans = document.select("div.qa-story-body span");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 13:53:13