Python 清理HTML标签类似PHP的strip_tags函数功能(二)
2014-09-30 16:11
776 查看
没有发现Python 有现成的类似功能模块,所以昨天写了个简单的 strip_tags 但还有些问题,今天应用到采集上时进行了部分功能的完善,
1. 对自闭和标签处理
2. 以及对标签参数的过滤
from html.parser import HTMLParser
def strip_tags(html, allow_tags=None, allow_attrs=None):
result = []
start = []
data = []
# 特殊的自闭和标签, 按 HTML5 的规则, 如 <br> <img> <wbr> 不再使用 /> 结尾
special_end_tags = [
'area', 'base', 'br', 'col', 'embed', 'hr',
'img', 'input', 'keygen', 'link', 'meta', 'param',
'source', 'track', 'wbr'
]
def starttag(tag, attrs):
if tag not in allow_tags:
return
start.append(tag)
my_attrs = []
if attrs:
for attr in attrs:
if allow_attrs and attr[0] not in allow_attrs:
continue
my_attrs.append(attr[0] + '="' + attr[1] + '"')
if my_attrs:
my_attrs = ' ' + (' '.join(my_attrs))
else:
my_attrs = ''
else:
my_attrs = ''
result.append('<' + tag + my_attrs + '>')
def endtag(tag):
if start and tag == start[len(start) - 1]:
# 特殊自闭和标签按照HTML5规则不加反斜杠直接尖括号结尾
if tag not in special_end_tags:
result.append('</' + tag + '>')
parser = HTMLParser()
parser.handle_data = result.append
if allow_tags:
parser.handle_starttag = starttag
parser.handle_endtag = endtag
parser.feed(html)
parser.close()
for i in range(0, len(result)):
tmp = result[i].rstrip('\n')
tmp = tmp.lstrip('\n')
if tmp:
data.append(tmp)
return ''.join(data)
1. 对自闭和标签处理
2. 以及对标签参数的过滤
from html.parser import HTMLParser
def strip_tags(html, allow_tags=None, allow_attrs=None):
result = []
start = []
data = []
# 特殊的自闭和标签, 按 HTML5 的规则, 如 <br> <img> <wbr> 不再使用 /> 结尾
special_end_tags = [
'area', 'base', 'br', 'col', 'embed', 'hr',
'img', 'input', 'keygen', 'link', 'meta', 'param',
'source', 'track', 'wbr'
]
def starttag(tag, attrs):
if tag not in allow_tags:
return
start.append(tag)
my_attrs = []
if attrs:
for attr in attrs:
if allow_attrs and attr[0] not in allow_attrs:
continue
my_attrs.append(attr[0] + '="' + attr[1] + '"')
if my_attrs:
my_attrs = ' ' + (' '.join(my_attrs))
else:
my_attrs = ''
else:
my_attrs = ''
result.append('<' + tag + my_attrs + '>')
def endtag(tag):
if start and tag == start[len(start) - 1]:
# 特殊自闭和标签按照HTML5规则不加反斜杠直接尖括号结尾
if tag not in special_end_tags:
result.append('</' + tag + '>')
parser = HTMLParser()
parser.handle_data = result.append
if allow_tags:
parser.handle_starttag = starttag
parser.handle_endtag = endtag
parser.feed(html)
parser.close()
for i in range(0, len(result)):
tmp = result[i].rstrip('\n')
tmp = tmp.lstrip('\n')
if tmp:
data.append(tmp)
return ''.join(data)
相关文章推荐
- Python 清理HTML标签类似PHP的strip_tags函数功能(二)
- Python 清理HTML标签相似PHP的strip_tags函数功能(二)
- Python 实现类似PHP的strip_tags函数功能,并且可以自定义设置保留标签
- Python 实现类似PHP的strip_tags函数功能,并且可以自定义设置保留标签(一)
- strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签
- php去除、去掉html标签函数strip_tags
- PHP中strip_tags() 函数的使用方法和介绍,去除字符串中的HTML标签等
- PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
- 安装 html2text - python下类似php的strip_tags
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- PHP去除HTML标签函数——strip_tags和htmlspecialchars
- PHP学习笔记之strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- Python 实现类似PHP的strip_tags功能,并能够定义他们自己的一套保留标记
- php strip_tags() 函数去除 HTML、XML 以及 PHP 的标签。
- strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签
- PHP - Manual手册 - Function Reference函数参考 - Text Processing文本处理 - Strings字符串 - String Functions字符串函数 - strip_tags字符串中去除HTML和PHP标记
- PHP strip_tags 怎么 保留多个HTML标签