PAYATHON 2026

selectolax 如何只提取元素的直接文本?

数据小许

结论

将 text() 的 deep 参数设为 False,只读取当前节点的直接文本,不会包含子节点 <span> 中的 *。设置 strip=True 后,还会去掉直接文本两端的空白和换行:

for d in tree.css('[rel="mw:WikiLink"]'):
    print(d.text(deep=False, strip=True))

对于题目中的 HTML,输出为:

rannijaną

原因

原代码调用 d.text() 时使用默认的深度文本提取,因此也会读取 <a> 内部子元素的文本。题目中的 <span typeof="mw:Entity">*</span> 是 <a> 的子元素,所以结果里也包含了 *。

deep=False 只提取当前节点的直接文本,strip=True 会清除文本首尾的空白。若要保留首尾空白,可以省略 strip=True。

备注:内容仅供参考。