这篇文章的内容是接着上一篇的内容继续的,上一篇文章中简单的得到了DOM的最大深度,这里我要接着对得到的数据进行计算,分别得到均值、中位数、方差。

利用均值和中位数的目的是:利用统计的特征来衡量一下DOM树每一条路径的向中部数值的聚拢程度或者说是大多数路径的分布集中在什么取值的区域内,以便于接下来的分析工作。

利用方差的目的是:利用整体的统计特征来观察整体的路径波动性是怎么样的,也就是看路径的分布是比较平缓的状况还是向高斯分布一样的中间聚拢,两边骤减的状况

好了,简单的说了这些,简单的实现如下:

#!usr/bin/env python
#encoding:utf-8'''
__author__:沂水寒城
功能:python处理xpath得到页面的DOM树深度
'''from get_all_node_xpath import *def get_tree_max_deepth(all_xpath_list):'''得到一个HTML页面形成的xpath列表中最大长度,即DOM树的最大深度'''tree_deepth_list=[]for one_xpath in all_xpath_list:tree_deepth_list.append(len(one_xpath.split('/')[1:]))return max(tree_deepth_list)def calculate_fangcha(average_length_value, length_list):'''计算给定列表中数据的方差值(没开平方的值)输入为:平均数和列表输出为:方差'''total_sum=0for one_num in length_list:total_sum+=math.pow((one_num-average_length_value), 2)return total_sum/len(length_list)def get_xpath_statics_features(all_xpath_list):'''输入:页面的DOM树xpath列表输出:xpath列表中路径的长度的平均数、中位数、方差'''length_list=[]for one_xpath in all_xpath_list:length_list.append(len(one_xpath.split('/')[1:]))average_length_value=sum(length_list)/len(length_list)length_sorted_list=sorted(length_list)middle_num=length_sorted_list[int(math.ceil(len(length_sorted_list)/2))]fangcha=calculate_fangcha(average_length_value, length_list)return average_length_value, middle_num, fangchaif __name__ == '__main__':with open('../baidu.txt') as f:baidu=f.read()baidu_tree, baidu_xpath_list=get_clean_allnodes_xpath(baidu)max_tree_deepth=get_tree_max_deepth(baidu_xpath_list)for one_xpath in baidu_xpath_list:print one_xpathprint 'max_tree_deepth is:', max_tree_deepthaverage_length_value, middle_num, fangcha=get_xpath_statics_features(baidu_xpath_list)print 'average_length_value is:', average_length_valueprint 'middle_num is:', middle_numprint 'fangcha is:', fangcha

结果如下:

/html
/html/head
/html/head/meta[1]
/html/head/meta[2]
/html/head/meta[3]
/html/head/meta[4]
/html/head/title
/html/body
/html/body/p
/html/body/p/comment()[1]
/html/body/p/comment()[2]
/html/body/p/comment()[3]
/html/body/p/meta
/html/body/div[1]
/html/body/div[1]/div[1]
/html/body/div[1]/div[1]/div
/html/body/div[1]/div[1]/div/div[1]
/html/body/div[1]/div[1]/div/div[1]/div
/html/body/div[1]/div[1]/div/div[1]/div/div[1]
/html/body/div[1]/div[1]/div/div[1]/div/a
/html/body/div[1]/div[1]/div/div[1]/div/form
/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[2]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/div
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/div/span
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[1]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[1]/a
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[2]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[2]/a
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[3]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[4]
/html/body/div[1]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[4]/a
/html/body/div[1]/div[1]/div/div[1]/div/div[2]
/html/body/div[1]/div[1]/div/div[2]
/html/body/div[1]/div[1]/div/div[2]/a[1]
/html/body/div[1]/div[1]/div/div[2]/a[2]
/html/body/div[1]/div[1]/div/div[2]/a[3]
/html/body/div[1]/div[1]/div/div[3]
/html/body/div[1]/div[1]/div/div[3]/a[1]
/html/body/div[1]/div[1]/div/div[3]/a[2]
/html/body/div[1]/div[1]/div/div[3]/a[3]
/html/body/div[1]/div[1]/div/div[3]/a[4]
/html/body/div[1]/div[1]/div/div[3]/a[5]
/html/body/div[1]/div[1]/div/div[3]/a[6]
/html/body/div[1]/div[1]/div/div[3]/a[7]
/html/body/div[1]/div[1]/div/div[3]/a[8]
/html/body/div[1]/div[1]/div/div[3]/a[9]
/html/body/div[1]/div[2]
/html/body/div[1]/div[2]/a[1]
/html/body/div[1]/div[2]/a[2]
/html/body/div[1]/div[2]/a[3]
/html/body/div[1]/div[2]/a[4]
/html/body/div[1]/div[2]/a[5]
/html/body/div[1]/div[2]/a[6]
/html/body/div[1]/div[2]/a[7]
/html/body/div[1]/div[2]/a[8]
/html/body/div[1]/div[2]/a[9]
/html/body/div[1]/div[3]
/html/body/div[1]/div[3]/div
/html/body/div[1]/div[3]/div/div
/html/body/div[1]/div[3]/div/div/div[1]
/html/body/div[1]/div[3]/div/div/div[2]
/html/body/div[1]/div[3]/div/div/div[2]/p
/html/body/div[1]/div[4]
/html/body/div[1]/div[4]/div
/html/body/div[1]/div[4]/div/div
/html/body/div[1]/div[4]/div/div/p[1]
/html/body/div[1]/div[4]/div/div/p[1]/a[1]
/html/body/div[1]/div[4]/div/div/p[1]/a[2]
/html/body/div[1]/div[4]/div/div/p[1]/a[3]
/html/body/div[1]/div[4]/div/div/p[1]/a[4]
/html/body/div[1]/div[4]/div/div/p[2]
/html/body/div[1]/div[4]/div/div/p[2]/a[1]
/html/body/div[1]/div[4]/div/div/p[2]/a[2]
/html/body/div[1]/div[4]/div/div/p[2]/a[3]
/html/body/div[1]/div[5]
/html/body/div[2]
/html/body/div[3]
/html/body/div[4]
max_tree_deepth is: 13
average_length_value is: 6
middle_num is: 7
fangcha is: 8.29268292683

好了,DOM树路径的统计特征就说这么多,欢迎一起交流!

python使用lxml库对解析后的DOM树形成的xpath计算得到平均值、中位数、方差相关推荐

  1. python添加lxml库_Python lxml库简介

    lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取.市面上有很多现成的XML解析器,但是为了获得更好的结果,开发人员有时更愿意编写自己的XML和HTML解析器. ...

  2. Python操作lxml库(基础篇)

    ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 学习日记 目录 目录 学习日记 一.lxml库概述 1.lxml库介绍 2.l ...

  3. python的lxml库简介_Python lxml库简介

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取.市面上有很多现 ...

  4. Python操作lxml库(Xpath篇)

    ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 学习日记 目录 学习日记 一.Xpath概述 1.Xpath简介 2. Xpa ...

  5. 用Python的turtle库画一颗简单的树(双层递归的思想)

    用Python的turtle库画一颗简单的树(双层递归的思想) 这段时间比较闲,在CSDN上随便逛逛,看到有些用Python来绘图的程序,很有意思.于是作为Python小白的我,也自己动手尝试了一下, ...

  6. python网络爬虫系列教程——python中lxml库应用全解(xpath表达式)

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install lxml" 离线安装,下载 ...

  7. 21天Python学习——lxml库与Xpath提取网页数据

    ​ ​ 活动地址:CSDN21天学习挑战赛 一.爬虫提取网页数据的流程图 图源:100天精通Python(爬虫篇)--第45天:lxml库与Xpath提取网页数据_无 羡ღ的博客-CSDN博客_pyt ...

  8. Python中lxml库的安装(Windows平台)

    之前写过<Python中requests包的安装>,今天我需要安装lxml库,这里我尝试之前安装requests方式,但是没有成功,几经周折,终于总结出来了一个方法,这里拿出来给大家分享. ...

  9. python安装lxml库出错_python安装lxml出错的解决方法

    python安装lxml出错的解决方法 发布时间:2020-08-07 09:44:14 来源:亿速云 阅读:71 作者:小新 这篇文章给大家分享的是有关python安装lxml出错的解决方法的内容. ...

  10. 21天学习挑战赛——Python爬虫 lxml库与Xpath提取网页数据

    目录 ​1. 爬虫提取网页数据流程图 2. lxml库 2.1 解析HTML网页 3. Xpath 3.1 选取节点 3.2 谓语 3.3 选取未知节点 3.4 选取若干元素 4. Xpath实战 4 ...

最新文章

  1. Eclipse单元测试Android编程,在Eclipse中进行Android单元测试-Fun言
  2. dso_loader.cc:55] Could not load dynamic library ‘cudart64_100.dll‘
  3. 消息发送 C语言版和 Visual Basic Script版
  4. 记一次fastjson转jackson的生产事故
  5. 计算机怎样选定硬盘,如何给电脑分盘
  6. android Android-PullToRefresh 下拉刷新
  7. drupal6 笔记
  8. 面试之什么是java虚拟机
  9. 开源音乐播放器_如何选择开源音乐播放器
  10. 4场直播丨站撸Oracle、MySQL、医疗、航空
  11. jedis mysql 数据结构_Redis的数据结构和内部编码
  12. 第三期 预测——2.输入和输出
  13. 【证明】—— 二叉树的相关证明
  14. 软件工程 - chapter02 - 敏捷开发
  15. android 问题-----Please execute 'adb uninstall com.newland.securityclient' in a shell.
  16. 2021年全球与中国木材采伐设备行业市场规模及发展前景分析
  17. entfrm开发平台,一个免费开源可视化的无代码开发平台
  18. Everything研究之快速获取USN记录的文件路径
  19. PTA 吉老师的回归
  20. ARM9的存储结构~~大端存储和小端存储

热门文章

  1. 1月10日云栖精选夜读:专访金榕:四年蜕变,阿里iDST是如何登上浪潮之巅的?...
  2. 【SAE 部署 JavaWeb 项目报 404 错误】
  3. 源码推荐:多图无缝滚动控件,多视图控制器间切换
  4. Hibernate 查询
  5. 一起谈.NET技术,ASP.NET的状态管理
  6. DNS解析错误解决办法
  7. SQL SERVER 触发器中如何调用外部程序
  8. 【Kafka】01 生产者
  9. python框架之Flask(4)-上下文管理
  10. Windows Server 2008取消登录前的Ctrl+Alt+Delete组合键操作