Google Sheets中利用XPath提取HTML首个UL列表文本的需求
搞定Google Sheets中提取UL下首个LI完整文本的问题
我明白你的痛点——600个结构一致但列表顺序不固定的页面,用IMPORTHTML的索引法完全不靠谱,之前只能抠出个“Galleon”,现在要拿到完整的“Galleon in Valley of the Four Winds.”字符串,用XPath精准定位就对了!
核心解决方案:用IMPORTXML+XPath+JOIN合并文本
因为目标LI里的文本可能分散在A标签内部和A标签之后的节点里,直接提取会拆成多个单元格,所以我们需要把这些文本节点合并起来。试试这个公式:
=TRIM(JOIN("", IMPORTXML(B2, "//ul[1]/li[1]/text() | //ul[1]/li[1]/a/text()")))
拆解一下这个公式的逻辑:
//ul[1]:精准定位页面里第一个出现的UL标签(不管它在DOM的哪个层级,避开其他干扰列表)li[1]:取这个UL下的第一个LI元素,也就是你要的目标列表项text() | //ul[1]/li[1]/a/text():同时提取LI下的所有普通文本节点,以及LI内部A标签里的文本节点(用|表示“或”)JOIN("", ...):把所有提取到的零散文本拼接成一个完整字符串TRIM():自动去掉拼接后可能出现的多余首尾空格
备选方案:用string()直接获取节点完整文本
如果Google Sheets支持XPath的string()函数(大部分版本都支持),你也可以用更简洁的写法:
=IMPORTXML(B2, "string(//ul[1]/li[1])")
这个XPath的string(//ul[1]/li[1])会直接把目标LI节点下的所有文本内容(包括子标签里的)合并成一个字符串返回,一步到位。
为什么这个方法比IMPORTHTML靠谱?
IMPORTHTML(B2,"list",3)是按页面中所有列表的顺序来索引的,但你说列表顺序不固定,索引值随时会变。而我们用的XPath是直接定位第一个UL下的第一个LI,完全不受其他列表位置的影响,600个页面可以批量套用,不用逐个调整索引。
内容的提问来源于stack exchange,提问作者kosta12
相关产品推荐
相关产品推荐

