如何用单条XPath查询处理Xidel获取的MathML魔法替代文本?
问题:单条XPath查询能否直接获取维基百科MathML的文本内容?
执行以下Xidel命令获取维基百科页面的MathML内容时,返回结果混乱:
xidel 'https://en.wikipedia.org/wiki/List_of_trigonometric_identities' -e '/html/body/div[3]/div/div[3]/main/div[3]/div[3]/div[2]/p[5]/span/span/math'
通过两条命令的管道组合可修复该问题:
xidel 'https://en.wikipedia.org/wiki/List_of_trigonometric_identities' -e '/html/body/div[3]/div/div[3]/main/div[3]/div[3]/div[2]/p[5]/span/span/math' --output-format=xml | xidel -e 'math/semantics/annotation'
请问是否真的无法通过单条XPath查询实现该效果?该问题与GitHub项目wikipedia-markdown-generator的Issue #9成因一致。
解答
完全可以通过单条XPath查询直接实现,不需要分两条命令。问题根源是原命令未指定正确的输出格式,且XPath没有直接定位到目标文本节点:
单命令解决方案
xidel 'https://en.wikipedia.org/wiki/List_of_trigonometric_identities' -e '/html/body/div[3]/div/div[3]/main/div[3]/div[3]/div[2]/p[5]/span/span/math/semantics/annotation' --output-format=text
原理说明
- 原命令返回结果混乱,是因为Xidel默认输出会将HTML节点的所有文本内容直接拼接,丢失了MathML的层级结构,导致内容杂乱无章。
- 维基百科的MathML结构中,
semantics/annotation节点才是存储可读文本的目标节点,直接用XPath定位到该节点,再通过--output-format=text指定输出纯文本,就能一步获取清晰的内容。
更健壮的版本(避免依赖固定DOM索引)
如果担心页面DOM结构变动导致路径失效,可以改用基于class的XPath,更稳定:
xidel 'https://en.wikipedia.org/wiki/List_of_trigonometric_identities' -e '//div[@class="mw-content-ltr"]/p[5]/span/span/math/semantics/annotation' --output-format=text
内容的提问来源于stack exchange,提问作者Signor Pizza
相关产品推荐
相关产品推荐

