⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getpagedata.java

📁 从网页中扫描提取需要的信息
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*程序功能:
 *从特定格式的网页中提取所需要的数据并将其保存到数据库中
 */
import java.net.*;
import java.io.*;
import java.util.*;
import java.sql.*;

public class GetPageData 
{
	
	Connection con;      //数据库连接对象
	Statement stmt;      //用于执行SQL语句
	ResultSet rset;      //用于存储SQL查询的返回结果
	ScanWebPage myScanWebPage=new ScanWebPage(); //创建网页扫描对象
	String address;      //用于存储网页地址
	
	//主函数,程序入口
	public static void main (String[] args) 
	{
		
		try
		{
		  //创建GetPageData对象,用于执行其方法
		  GetPageData myGetPageData=new GetPageData();
		  
		  myGetPageData.openConn(); //建立数据库连接
		  myGetPageData.dealWeb0(); //提取首页数据
		  myGetPageData.dealWeb1(); //提取"机房信息"页面数据
		  myGetPageData.dealWeb2(); //提取"设备状态"页面数据
		  myGetPageData.dealWeb3(); //提取"实时图像"页面数据 
		  
		  //程序结束,断开连接
		  myGetPageData.closeConnection(); 
		}
		
		catch(Exception e)
		{
			//输出程序异常信息,以便调试
			System.out.println("程序异常,信息为:\n"+e);
		}
	}
	
	//连接数据库函数
	void openConn()
	{
		
	  try
	  {	
	    //加载数据库驱动程序
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		//根据用户名和密码,建立与数据库的连接
		con=DriverManager.getConnection("jdbc:odbc:AccessServer","sa","");
		//创建Statement对象
		stmt=con.createStatement();
	  }
	  catch(java.lang.Exception exec)
		{
			System.out.println("加载数据库驱动程序出现异常\n"+exec.toString());
		}
	}
	
	//首页数据处理函数
	void dealWeb0() throws Exception
     {
		//address="http://192.9.201.121/";  //网页地址
		address="file:///D:/学习/程序/网页提取/单片机网页/web0.htm";  //网页地址
		//首页只需获得总告警信息
		Information.indexColumn=0;        //数组指针复位
		Information.currentPage=0;        //标识当前正在处理的页面
		myScanWebPage.openConnection(address);  //建立http连接
		myScanWebPage.readFile();         //读取所需的页面数据
		myScanWebPage.closeConnection();  //关闭http连接
		 
	 }
	
    //"机房信息"页面处理函数	 	
	void dealWeb1() throws Exception
     {
		//address="http://192.9.201.121/web1.1.htm";  //网页地址
		address="file:///D:/学习/程序/网页提取/单片机网页/web1.1.htm";  //网页地址
		
		String strSQL;                             //存储SQL语句
		System.out.println("======================处理\"机房信息\"页面=======================");
		Information.indexColumn=0;               //数组指针复位
		Information.currentPage=1;              //标识当前正在处理的页面
		
		
     	  	myScanWebPage.openConnection(address);  //建立http连接
			myScanWebPage.readFile();              //读取所需的页面数据    
			myScanWebPage.closeConnection();      //关闭http连接
			
			//测试代码
			System.out.println("\n------------提取到页面数据-----------");
			for(int i=0;i<Information.indexColumn;i++)
			   System.out.println(i+":"+Information.column[i]);
			   
			System.out.println("------------更新数据库----------------");
			
			//更新数据表"机房信息_全局" 先查询数据是否存在
			//若不存在则插入新值,否则不更新
			strSQL="select * from 机房信息_全局 where 机房编号='"
			       +Information.column[1]+"'";    //根据数据表的主键查询
			rset= stmt.executeQuery(strSQL);      //执行SQL查询语句
			if(rset.next())                       //判断是否有需要的查询值
			    System.out.println("表\"机房信息_全局\" 机房编号="
			                       +rset.getString("机房编号")+" 的信息已经存在\n");
			else
			   {  
			    //插入新纪录
			    strSQL="insert into 机房信息_全局(机房编号,机房名称,机房地址) values('"
			           +Information.column[1]+"','"+Information.column[0]+"','"
			           +Information.column[2]+"');";
			    //执行SQL插入语句       
			    stmt.executeUpdate(strSQL); 
			    
			      //输出刚刚执行的SQL语句,以便分析                      
			      System.out.println("表\"机房信息_全局\"中成功添加记录:");
		          System.out.println("   机房编号="+Information.column[1]+ 
		                             "\n   机房名称="+Information.column[0]+ 
		                             "\n   机房地址="+Information.column[2]+ "\n");
			   } 
			   
			//更新数据表"机房信息_各地"前,先判断是否提取到新的记录
			if(Information.column[3].equals("null")
			   ||Information.column[4].equals("null")
			   ||Information.column[5].equals("null"))
			 {
			 	System.out.println("机房信息网页中无可用的职守人员信息!");
			 	return;
			 }
			//存储总告警信息 
			String state; 
			   
			//根据告警标志,判断是否有警
			if(Information.warning.equals("red.jpg"))
			    {
			    	state="true";
			    	System.out.println(Information.column[0]+" 告警!!\n");
			    }			    
			else  
			{
				state="false";
				System.out.println(Information.column[0]+" 正常!!\n");
			}
			
			//更新数据表"机房信息_各地" 先查询数据是否存在
			//若不存在则插入新值,否则不更新
			
			//根据"值班人员"字段查询
			strSQL="select * from 机房信息_各地 where 值班人员='"+Information.column[3]+"'"; 
			
			rset= stmt.executeQuery(strSQL);  //执行SQL查询语句
			
			if(rset.next())                  //判断是否有需要的查询值 
			    System.out.println("表\"机房信息_各地\" 值班人员 \""
			                       +rset.getString("值班人员")+"\" 信息已经存在");
			else
			   { 
			    //插入新纪录
			    strSQL="insert into 机房信息_各地"
			           +"(机房编号,值班人员,告警信息,值班电话,邮箱) values('"
			           +Information.column[1]+"','"+Information.column[3]+"',"
			           +state+",'"+Information.column[4]+"','"
			           +Information.column[5]+"');"; 
			    //执行SQL插入语句        
			    stmt.executeUpdate(strSQL);
			    
			    //输出刚刚执行的SQL语句,以便分析  
	                System.out.println("表\"机房信息_各地\"中成功添加记录:");
		            System.out.println("   机房编号="+Information.column[1]+ 
		                               "\n   值班人员="+Information.column[3]+ 
		                               "\n   告警信息="+state+
		                               "\n   值班电话="+Information.column[4]+
		                               "\n   邮箱="+Information.column[5]+ "\n");
			   }  
    }
    
    //"设备状态"页面处理函数
    void dealWeb2() throws Exception
     {
     	int i,j;                                   //临时变量
		//address="http://192.9.201.121/web1.2.htm"; //网页地址
		address="file:///D:/学习/程序/网页提取/单片机网页/web1.2.htm"; //网页地址
		
		String strSQL;                             //存储SQL语句
		System.out.println("\n\n======================处理\"设备状态\"页面=======================");
		Information.indexColumn=0;                 //数组指针复位
		Information.currentPage=2;                 //标识当前正在处理的页面
		
		
     	  	myScanWebPage.openConnection(address); //建立http连接
			myScanWebPage.readFile();              //读取所需的页面数据   
			myScanWebPage.closeConnection();       //关闭http连接
			
			System.out.println("\n------------提取到页面数据-----------");
			for(i=0;i<Information.indexColumn;i++)
			   System.out.println(i+":"+Information.column[i]);
			   
			//distance表示页面中的"局号"标志和第一个设备序号标志之间的距离
			int distance=1;                        
			String equipmentID;                     //存储设备id
			boolean state;                          //表示设备状态
			System.out.println("------------更新数据库----------------");
			for(i=0;i<6;i++)                        //依次记录所需的6个设备
			{
				
			   j=1+distance+i*6; //记录页面中当前设备的序号    
			   
			   //计算设备编号对应的ID,监控设备编号=机房编号+设备编号
			   equipmentID=Information.column[1]+Information.column[j];
			   
			   //更新数据表"设备管理_编号" 先查询数据是否存在
			   //若不存在插入新值,否则不更新
			   
			   //根据"监控设备编号"字段查询
			   strSQL="select * from 设备管理_编号 where 监控设备编号='"+equipmentID+"'";   
			   
			   rset= stmt.executeQuery(strSQL);     //执行SQL查询语句
			   
			   if(rset.next())                      //判断是否有需要的查询值
			       System.out.println("表\"设备管理_编号\" 监控设备编号="
			                          +equipmentID+" 的信息已经存在\n");
			   else
			     {
			       //插入新纪录
			       strSQL="insert into 设备管理_编号"
			              +"(监控设备编号,设备所属机房,监控设备项目) values('"
			              +equipmentID+"','"+Information.column[0]
			              +"','"+Information.column[j+1]+"');";
			       //执行SQL插入语句       
			       stmt.executeUpdate(strSQL);
			       
			       //输出刚刚执行的SQL语句,以便分析
			        System.out.println("表\"设备管理_编号\"中成功添加记录:");
		            System.out.println("   监控设备编号="+equipmentID+ 
		                               "\n   设备所属机房="+Information.column[0]+
		                               "\n   监控设备项目="+Information.column[j+1]+ "\n");
			     } 	  
			       
			   //更新数据表"设备管理_设备状态"前,先判断是否提取到新的记录
			   if(Information.column[j+3].equals("null")
			     ||Information.column[j+4].equals("null")
			     ||Information.column[j+5].equals("null"))
			   {
			 	  System.out.println("设备状态网页中无可用的 "
			 	                     +Information.column[j+1]+" 设备使用时间记录信息!");
			 	  continue;
			   }
			   
			   if(Information.column[j+2].equals("1")) 
			         state=true;       //1表示报警
			   else 
			        state=false;       //0表示正常
			   
			   //更新数据表"设备管理_设备状态",先查询数据是否存在
			   //若不存在则插入新值,否则不更新
			   
			   //根据"监控设备编号"字段查询			   
			   strSQL="select * from 设备管理_设备状态 where 监控设备编号='"+equipmentID+"'";

			   rset= stmt.executeQuery(strSQL);    //执行SQL查询语句
			   
			   if(rset.next())                     //判断是否有需要的查询值
			       System.out.println("表\"设备管理_设备状态\" 监控设备编号="
			                          +equipmentID+" 的信息已经存在\n");
			   else
			     {
			     	//插入新纪录
			     	strSQL="insert into 设备管理_设备状态"
			     	       +"(监控设备编号,监控设备状态,状态起始时间,状态结束时间,间隔时间) values('"
			     	       +equipmentID+"',"+state+",'"+Information.column[j+3]+"','"
			     	       +Information.column[j+4]+"','"+Information.column[j+5]+"');";
			     	//执行SQL插入语句       
			     	stmt.executeUpdate(strSQL);
			     	
			     	//输出刚刚执行的SQL语句,以便分析
			     	System.out.println("表\"设备管理_设备状态\"中成功添加记录:");
		            System.out.println("   监控设备编号="+equipmentID+
		                               "\n   监控设备状态="+Information.column[j+2]+
		                               "\n   状态起始时间="+Information.column[j+3]+
		                               "\n   状态结束时间="+Information.column[j+4]+
		                               "\n   开门结束时间="+Information.column[j+5]+"\n");
			     } 
		    }
		    
		    //更新数据表"设备管理_设备状态_刷卡记录"前,先判断是否提取到新的记录
		    if(Information.column[38].equals("null")
		       ||Information.column[39].equals("null")
		       ||Information.column[40].equals("null")
		       ||Information.column[41].equals("null"))
			   	  System.out.println("设备状态网页中无可用的刷卡记录数据!");
			else
			 {
			   //插入新纪录
			   strSQL="insert into 设备管理_设备状态_刷卡记录"
			          +"(卡号,机房编号,开门起始时间,开门结束时间,间隔时间) values('"
			          +Information.column[41]+"','"+Information.column[1]+"','"
			          +Information.column[38]+"','"+Information.column[39]+"','"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -