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

如何通过Scrapy XPath路径精准提取HTML中li与ul元素的文本?

精准提取Scrapy Selector中的文本内容

提取Text1

你之前用//li/text()会拿到所有层级<li>的文本(包括外层li的空白换行),要精准拿到Text1,可以通过定位最外层的<li>(它没有父级<ul>),再提取其有效文本:

# 方法1:过滤掉空白内容,只保留有效文本
selector.xpath('//li[not(ancestor::ul)]/text()[normalize-space()]').extract()

# 方法2:直接获取该节点的规范化文本(自动去除多余空白)
selector.xpath('normalize-space(//li[not(ancestor::ul)])').extract()

两种方法都会返回['Text1']。

提取Text2和Text3

你的思路完全正确,直接用精准路径定位内层<li>即可:

selector.xpath('//li/ul/li/text()').extract()

执行后会得到['Text2', 'Text3']。

补充说明

原来的//li/text()之所以会拿到冗余内容,是因为//li会匹配页面中所有层级的<li>元素,包括外层和内层的,text()会返回这些元素下的所有文本节点(包括换行、缩进这类空白字符)。通过添加层级限制(比如//li/ul/li)或者父级过滤(not(ancestor::ul)),就能精准定位到目标元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:39:19