from w3lib.html import remove_tags
import re

html ='''<li><b>map</b> :映射函数 (生成键值对序列,作为 reduce 函数参数)。</li>
<li> <b>reduce</b> 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。</li>
<li> <b>out</b> 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。<img src="//static.runoob.com/images/map-reduce.bakedsvg.svg"></li>
<li> <b>query</b> 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)</li>
<li> <b>sort</b> 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制 </li>
<li> <b>limit</b> 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大) </li>

'''
html2 = html.replace('div>','p>').replace('li>','p>')

tag = remove_tags(html2, keep=('p','img'))
end_tag = re.sub('<img .+>','<img>',tag) #去掉img参数
print(end_tag)

输出结果只保留p便签和img标签

<p>map :映射函数 (生成键值对序列,作为 reduce 函数参数)。</p> 
<p> reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。</p>
<p> out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。<img>
<p> query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)</p>
<p> sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制 </p>
<p> limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大) </p>