如何通过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
相关产品推荐
相关产品推荐

