如何用XPath提取HTML中Label标签对应的"East to West"内容?
解决XPath提取Label对应内容的问题
我来帮你搞定这个问题!先看看你的HTML结构:
<div class="product-details"> <dl> <dt>Label:</dt> <dd> East to West <br> </br> </dd> <dt>Subtitles:</dt> <dd> ---- <br> </br> </dd> </dl> </div>
你之前的XPath response.xpath('//dl[dt = "Label:"]/following-sibling::text()').extract_first() 返回空白,是因为它找的是dl元素的后续兄弟文本节点,而你的目标内容其实在dt的同级dd标签里,完全找错位置啦!
这里给你几个正确的写法:
方法1:定位到Label对应的dd节点,提取并清理文本
直接找到文本为"Label:"的dt,然后取它后面第一个dd的文本,再用normalize-space()去除多余的换行、空格和制表符:
response.xpath('normalize-space(//dt[text()="Label:"]/following-sibling::dd[1]/text())').extract_first()
这样就能得到干净的East to West了。
方法2:通过dl容器定位dd
也可以先找到包含"Label:"的dl,再取里面的dd文本,同样配合清理:
response.xpath('normalize-space(//dl[dt/text()="Label:"]/dd/text())').extract_first()
为什么要加normalize-space?
因为你的dd里的文本包含换行、空格(比如<dd> East to West <br>里的前后空格),normalize-space()会自动把这些多余的空白字符去掉,只保留单词之间的单个空格,正好符合你的需求。
如果不想用XPath的normalize-space,也可以在提取后用Python的字符串方法清理,比如:
text = response.xpath('//dt[text()="Label:"]/following-sibling::dd[1]/text()').extract_first() clean_text = text.strip() if text else None
这样也能得到同样的结果~
内容的提问来源于stack exchange,提问作者DatCra
相关产品推荐
相关产品推荐

