设为首页 加入收藏

TOP

Python 解析html文档模块HTMLPaeser
2014-11-23 23:19:43 来源: 作者: 【 】 浏览:9
Tags:Python 解析 html 文档 模块 HTMLPaeser

python中,有三个库可以解析html文本,HTMLParser,sgmllib,htmllib。他们的实现方法不通,但功能差不多。这三个库中 提供解析html的类都是基类,本身并不做具体的工作。他们在发现的元件后(如标签、注释、声名等),会调用相应的函数,这些函数必须重载,因为基类中不作处理。


用Python中自带的HTMLPaeser模块,解析下面的HTMl文件


要求:1、获取到每一个漏洞的名称,CVE号,风险值


2、显示每一个漏洞单独显示,不要堆叠在一起


3、只获取高风险的漏洞




search
















































ID 检测名称 CVE号 检测类别 风险级别
1

FTP缓冲区溢出


CVE-1999-0789



FTP测试

高风险
2

AFS客户版本



信息获取测试

信息
1

ACC 路由器无需认证显示配置信息


CVE-1999-0383



网络设备测试

中风险
3

Knox Arkeia 缓冲区溢出


CAN-1999-1534



杂项测试

高风险





Python程序

html_get.py


class CustomParser(HTMLParser.HTMLParser):
'''
定义一个新的HTMLParser类,覆盖用到的方法
'''
cve_list = []
sigle_cve = []
selected = ('table', 'div', 'tr', 'td', 'a','font') #需要解析的标签
selected_a = ['table/div/tr/td/a'] #需要获取标签a数据的路径
selected_font = ['table/div/tr/td/font'] #需要获取标签font数据的路径
def reset(self):
HTMLParser.HTMLParser.reset(self)
self._level_stack = []


def handle_starttag(self, tag, attrs):
if tag in CustomParser.selected:
self._level_stack.append(tag)
def handle_endtag(self, tag):
if self._level_stack and tag in CustomParser.selected and tag == self._level_stack[-1]:
self._level_stack.pop()
def handle_data(self, data):
#我们将需要获取的数据放到一个list中,同时每一个漏洞的数据会放到一个小的listz中
#如[[名称,CVE,风险],[名称,CVE,风险]],这里拿到的是全部HTML中的数据
if "/".join(self._level_stack) in CustomParser.selected_a and not CustomParser.sigle_cve:
print self._level_stack, data.decode('gbk').encode('utf-8')
CustomParser.sigle_cve.append(data.decode('gbk').encode('utf-8').strip())
elif "/".join(self._level_stack) in CustomParser.selected_a:
print self._level_stack, data.decode('gbk').encode('utf-8').strip()
CustomParser.sigle_cve.append(data.decode('gbk').encode('utf-8').strip())
elif "/".join(self._level_stack) in CustomParser.selected_font and CustomParser.sigle_cve:
print self._level_stack, data.decode('gbk').encode('utf-8').strip()
CustomParser.sigle_cve.append(data.decode('gbk').encode('utf-8').strip())
CustomParser.cve_list.append(CustomParser.sigle_cve)
CustomParser.sigle_cve = []
if __name__ == '__main__':
'''
读取,判断是否为高风险,是的打印出来
'''
try:
fd = open('test.html','r')
except Exception,error:
print error
html_string = fd.read()
ht = CustomParser()
ht.feed(html_string)
get_list = ht.cve_list
for item in get_list:
if item[-1] == '高风险':
print item
fd.close()


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇iOS 实现推送消息 下一篇Ubuntu下用arm-none-linux-gnueab..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: