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。
备注:内容仅供参考。
