Scrapy如何提取li内无class属性的文本(部分文本后含strong标签)
Scrapy提取指定li标签文本解决方案
针对你给出的网页结构,可直接通过XPath过滤指定span节点,同时自动兼容带/不带strong标签的场景,无需单独处理strong节点,具体实现如下:
核心思路
提取li节点下所有后代文本,仅过滤掉父节点为orange-caret类的span的文本内容,剩下的内容自动拼接即可得到完整目标文本。
代码实现
def parse(self, response): # 定位所有目标li节点 li_nodes = response.xpath('//div[@class="short-description"]//ul/li') res_text_list = [] for li in li_nodes: # 过滤掉带指定class的span的文本,提取剩余所有后代文本 text_parts = li.xpath('./descendant::text()[not(parent::span[@class="orange-caret"])]').getall() # 清理空白并拼接为完整文本 clean_text = ''.join([part.strip() for part in text_parts]).strip() res_text_list.append(clean_text) # 输出验证,得到的结果即为你需要的全部目标文本 print(res_text_list)
输出结果示例
执行上述代码后得到的结果如下:
- Diseñada para trabajar con agua limpia como pueden ser bombeos de pozos y manantiales o en sistemas de riego
- Uso industrial y agrícola
- Altura máxima: 30 m
- Flujo máximo 120 L/min
- Profundidad de inmersión máxima: 80 m
方案说明
该XPath写法适配你给出的所有结构场景,不需要单独判断li节点末尾是否携带strong标签,所有文本内容会自动提取拼接,稳定性高。
内容的提问来源于stack exchange,提问作者HUMBERTO VALLE
相关产品推荐
相关产品推荐

