1. #!/usr/bin/env python3
  2.  
  3. # -*- coding: UTF-8 -*-
  4.  
  5. from bs4 import BeautifulSoup
  6. import operator
  7. import os,shutil
  8. import re
  9.  
  10. def processhtml(item):
  11.   html_path = item
  12.   with open(html_path) as fp:
  13.     soup = BeautifulSoup(fp, "html.parser")
  14.   return soup
  15.  
  16. def IsComputer(soup_arg):
  17.   soup = soup_arg
  18.   result = False
  19.   try:
  20.     value = soup.find('input', {'name':'资源类型'}).get('value')
  21.     if value == '主机':
  22.       print('资源类型:主机')
  23.       result = True
  24.     elif value == '数据库':
  25.       print('资源类型:数据库')
  26.     else:
  27.       print('资源类型:其他')
  28.   except:
  29.     pass
  30.   return result
  31.  
  32. def IsAgree(soup_arg):
  33.   soup = soup_arg
  34.   result = False
  35.   try:
  36.     for row in soup.findAll('tr'):
  37.       cells = row.findAll('td')
  38.       if len(cells) == 4:
  39.         if cells[1].findChild("font") != None:
  40.           nStr = ""
  41.           nStr = nStr.join(cells[0].string)
  42.           target = ['帐号管理人员处理']
  43.           if (operator.eq(nStr.split(), target)):
  44.             print(cells[1].font.string)
  45.           if (operator.eq(nStr.split(), target) and cells[1].font.string == '同意'):
  46.             print("满足条件为:%s && 审批意见(同意)" % nStr.split()[0])
  47.             result = True
  48.   except IndexError as e:
  49.     pass
  50.   return result
  51.  
  52. def IsIntersect(soup_arg):
  53.   soup = soup_arg
  54.   result = False
  55.   try:
  56.     value = soup.find('input', {'name':'239385_资源名称'}).get('value')
  57.     temp_list = re.split('[、:\n]', value)
  58.     hosts_list = []
  59.     hosts_list.clear()
  60.     for hostlist in temp_list:
  61.       if re.search('[a-z]', hostlist):
  62.         print(hostlist)
  63.         hosts_list.append(hostlist)
  64.     hosts_set = set(hosts_list)
  65.     if target_hosts.intersection(hosts_set):
  66.       print('非空,有交集')
  67.       result = True
  68.     else:
  69.       print("空,无交集")
  70.   except:
  71.     pass
  72.   return result
  73.  
  74. def IsIntersect2(soup_arg):
  75.   soup = soup_arg
  76.   result = False
  77.   try:
  78.     value = soup.find('input', {'name':'所在的硬件设备/软件平台'}).get('value')
  79.     temp_list = re.split('[、:\n]', value)
  80.     hosts_list = []
  81.     hosts_list.clear()
  82.     for hostlist in temp_list:
  83.       if re.search('[a-z]', hostlist):
  84.         hosts_list.append(hostlist)
  85.     hosts_set = set(hosts_list)
  86.     if target_hosts.intersection(hosts_set):
  87.       print('非空,有交集')
  88.       result = True
  89.     else:
  90.       print("空,无交集")
  91.   except:
  92.     pass
  93.   return result
  94.  
  95. if __name__ == '__main__':
  96.   target_hosts = {'cmszsoaa', 'cmszsoab', 'cmszdcss', 'cmszicss', 'cmsznpsa', 'cmsznpsb', 'cmszinta', 'cmszintb',
  97.           'cmszdpsa', 'cmszdpsb', 'mcbsoaa', 'mcbsoab', 'mcbinta', 'mcbintb', 'mcbdpsa', 'mcbdpsb',
  98.           'mcbnpsa', 'mcbnpsb', 'mcbdcss', 'mcbicss', 'newdcss', 'newicss'}
  99.  
  100.   work_dir = '/root/XmlOut/'
  101.   target_dir = '/root/AccountOut/'
  102.  
  103.   for parent, dirnames, filenames in os.walk(work_dir, followlinks=True):
  104.     for filename in filenames:
  105.       file_path = os.path.join(parent, filename)
  106.       print("filename with full path: %s" % file_path)
  107.       soup = processhtml(file_path)
  108.       flag1 = IsComputer(soup)
  109.       flag2 = IsAgree(soup)
  110.       flag3 = IsIntersect(soup)
  111.       flag4 = IsIntersect2(soup)
  112.       if (flag1 and flag2 and (flag3 or flag4)):
  113.         print('%s, ok----' % (file_path))
  114.         shutil.copy(file_path, target_dir)

解析HTML文件的更多相关文章

  1. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  2. CSharpGL(9)解析OBJ文件并用CSharpGL渲染

    CSharpGL(9)解析OBJ文件并用CSharpGL渲染 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...

  3. Jsoup系列学习(2)-解析html文件

    解析html文件 1.当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 使用 Jsoup ...

  4. JAVA使用SAX解析XML文件

    在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...

  5. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  6. CSharpGL(5)解析3DS文件并用CSharpGL渲染

    CSharpGL(5)解析3DS文件并用CSharpGL渲染 我曾经写过一个简单的*.3ds文件的解析器,但是只能解析最基本的顶点.索引信息,且此解析器是仿照别人的C++代码改写的,设计的也不好,不方 ...

  7. php解析.csv文件

    public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...

  8. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  9. 使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

    使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

  10. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

随机推荐

  1. [Windows Server 2008] 安装网站伪静态

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装IIS伪静 ...

  2. RTL Compiler之synthesis steps

    1 synthesis steps 1) Search Paths rc:/> set_attribute lib_search_path path / rc:/> set_attribu ...

  3. CAD创建一个新的图形文件

    static void linea(void) { AcDbDatabase *pDb = new AcDbDatabase(true, false); AcGePoint3d pickPoint; ...

  4. CAD把一个命令当着一个函数调用,不执行(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_SendStringToExecuteFun 把一个命令当着一个函数调用,不执行,详细说明如下: 参数 说明 CString s ...

  5. java的四种引用,强弱软虚和jvm优化

    1.强引用(StrongReference)强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object();   //  强引用 当内存 ...

  6. C解析config

    #cat bb.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include < ...

  7. 使用Oracle函数在创建表的时候自动加入生成的流水号 生成格式是:前缀+年月日+00000

    CREATE OR REPLACE FUNCTION fn_no_make(v_type VARCHAR2, v_number_col VARCHAR2, v_table_name VARCHAR2) ...

  8. Codeforces 912D - Fishes

    传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...

  9. 在Docker上构建mysql容器

    1.查看docker上的镜像是否有 mysql,如果没有下载则列表中没有  [root@holly holly]# docker images; 如果没有只会看到如下结构 REPOSITORY  TA ...

  10. 中国省市区地址三级联动插件---jQuery Distpicker

    插件描述:distpicker是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. [官网]https://fengyuanchen.github ...