使用requests-html解析时排除span标签、保留b标签的问题咨询
解决方法
你可以直接操作requests-html底层封装的lxml节点实现需求,具体步骤如下:
- 先定位到待删除的
span.marker节点,将其从父节点中移除 - 序列化div节点的所有子节点,即可得到去掉外层div、保留b标签的目标内容
代码示例
# 假设你已经获取到目标div的requests-html Element对象,即你问题中提到的element # 定位span标签 marker_span = element.find('.marker', first=True) # 从父节点中移除span节点 marker_span.element.getparent().remove(marker_span.element) # 序列化div的子节点得到结果 from lxml import etree result = ''.join([ etree.tostring(child, encoding='unicode') for child in element.element.iterchildren() ])
最终输出的result就是你需要的Te<b>x</b>t。
原理解释
requests-html自带的html、text、full_text属性都无法满足选择性保留标签的需求:
html返回包含外层div的完整标签内容text和full_text只会提取纯文本,会丢弃所有HTML标签
直接调用底层lxml的节点操作API可以灵活实现节点增删、标签保留的需求。
内容的提问来源于stack exchange,提问作者Sergii
相关产品推荐
相关产品推荐

