python实现对解析之后的DOM进行层次化处理升序输出

320 篇文章 85 订阅
151 篇文章 4 订阅

    最近在着手做html的相关处理工作,因为前期的想法偏差,使用滑窗机制得到的签名居然和网页文本得到的签名是一模一样的,我调试了很多次都是这样,最终只好暂时搁浅,不明白是哪里出了问题,现在的做法是回归HTML的解析,得到页面的DOM树来进行下一步计算,不使用浏览器内嵌的开源引擎Webkit进行渲染,因为那样带来的结果就是时间代价太高了,对于得到的DOM树可以有进一步的处理得到每一层次的结点进行计算,这里做的工作即使对于每一层结点进行排序输出,因为这样的话更能反映出来层次性质,好了,说了这么多就不废话了,下面是早上刚处理的代码,很low,不喜勿喷,仅仅是实现了我需要的功能,之后可能会有进一步的优化,希望同行可以交流学习一下,我是一个新手

#!usr/bin/env python
#encoding:utf-8

'''
__author__:沂水寒城
功能:将解析得到的DOM树进行处理
输入:DOM的一层结点
输出:DOM输的一层经过结点标签排序后的结点
'''


def new_list(one_list):
    result_list=[]
    test1_dict={}
    list1=[]
    for one in one_list:
        if one.endswith(']'):
            test1_dict[int(one.split('[')[-1][:-1])]=one
        else:
            test1_dict[0]=one
    final_list = sorted(test1_dict.items(), key=lambda e:e[0])
    for i in range(len(final_list)):
        result_list.append(final_list[i][1])
    return result_list


def get_one_level_dict(one_level_list):
    result_list=[]
    test_dict={}
    label_list=[]
    for one in one_level_list:
        if one.endswith(']'):
            new_one_list=one.split('[')
            one_key=new_one_list[0]
            label_list.append(one_key)
        else:
            label_list.append(one)
    label_list=list(set(label_list))  #得到一层DOM树的结点种类
    for one_lable in label_list:
        list0=[]
        for one_char in one_level_list:
            if one_char[0:len(one_lable)]==one_lable:
                list0.append(one_char)
        test_dict[one_lable]=list0  #统计每一类别的结点的结点列表
    final_dict_list=sorted(test_dict.items(), key=lambda e:e[0])
    for i in range(len(final_dict_list)):
        result_list+=new_list(final_dict_list[i][1])
    return result_list


if __name__ == '__main__':
    list_test=['comment()[1]', 'comment()[2]', 'comment()[3]', 'comment()[4]', 'comment()[5]', 'comment()[6]', 'div[10]',
 'div[11]', 'div[12]', 'div[13]', 'div[14]', 'div[15]', 'div[16]', 'div[17]', 'div[18]', 'div[19]', 'div[1]', 'div[20]',
  'div[21]', 'div[22]', 'div[23]', 'div[24]', 'div[25]', 'div[2]', 'div[3]', 'div[4]', 'div[5]', 'div[6]', 'div[7]', 
  'div[8]', 'div[9]', 'link[10]', 'link[11]', 'link[12]', 'link[13]', 'link[14]', 'link[1]', 'link[2]', 'link[3]', 
  'link[4]', 'link[5]', 'link[6]', 'link[7]', 'link[8]', 'link[9]', 'meta[1]', 'meta[2]', 'meta[3]', 'meta[4]', 
  'meta[5]', 'script[10]', 'script[11]', 'script[12]', 'script[13]', 'script[14]', 'script[1]', 'script[2]', 
  'script[3]', 'script[4]', 'script[5]', 'script[6]', 'script[7]', 'script[8]', 'script[9]', 'style', 'title']

    result_list=get_one_level_dict(list_test)
    print result_list


    '''
    结果为:
    ['comment()[1]', 'comment()[2]', 'comment()[3]', 'comment()[4]', 'comment()[5]', 'comment()[6]', 
    'div[1]', 'div[2]', 'div[3]', 'div[4]', 'div[5]', 'div[6]', 'div[7]', 'div[8]', 'div[9]', 'div[10]', 'div[11]', 
    'div[12]', 'div[13]', 'div[14]', 'div[15]', 'div[16]', 'div[17]', 'div[18]', 'div[19]', 'div[20]', 'div[21]', 
    'div[22]', 'div[23]', 'div[24]', 'div[25]', 
    'link[1]', 'link[2]', 'link[3]', 'link[4]', 'link[5]', 'link[6]', 'link[7]', 'link[8]', 'link[9]', 'link[10]', 
    'link[11]', 'link[12]', 'link[13]', 'link[14]', 
    'meta[1]', 'meta[2]', 'meta[3]', 'meta[4]', 'meta[5]', 
    'script[1]', 'script[2]', 'script[3]', 'script[4]', 'script[5]', 'script[6]', 'script[7]', 'script[8]', 
    'script[9]', 'script[10]', 'script[11]', 'script[12]', 'script[13]', 'script[14]',
     'style', 
     'title']
    '''


    好了,今天就说这么

    Keep  Learning...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值