`
pcajax
  • 浏览: 2162818 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据采集基类[转]

阅读更多
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MSXML2; // 添加引用、COM、Microsoft   XML   ,   v2.6、选择、确定。
using System.Text.RegularExpressions;

    
/// <summary>
    
/// 远程文件抓取类
    
/// </summary>
public class GetRemoteObj
{

    
#region 构造与析构函数
    
public GetRemoteObj()
    {
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }
    
~GetRemoteObj()
    {
        Dispose();
    }
    
#endregion

    
#region IDisposable 成员

    
public void Dispose()
    {
        GC.SuppressFinalize(
this);
    }

    
#endregion

    
#region 日期随机函数
    
/**********************************
         * 函数名称:DateRndName
         * 功能说明:日期随机函数
         * 参    数:ra:随机数
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          Random ra = new Random();
         *          string s = o.DateRndName(ra);
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 日期随机函数
    
/// </summary>
    
/// <param name="ra">随机数</param>
    
/// <returns></returns>
    public string DateRndName(Random ra)
    {
        DateTime d 
= DateTime.Now;
        
string s = null, y, m, dd, h, mm, ss;
        y 
= d.Year.ToString();
        m 
= d.Month.ToString();
        
if (m.Length < 2) m = "0" + m;
        dd 
= d.Day.ToString();
        
if (dd.Length < 2) dd = "0" + dd;
        h 
= d.Hour.ToString();
        
if (h.Length < 2) h = "0" + h;
        mm 
= d.Minute.ToString();
        
if (mm.Length < 2) mm = "0" + mm;
        ss 
= d.Second.ToString();
        
if (ss.Length < 2) ss = "0" + ss;
        s 
+= y + m + dd + h + mm + ss;
        s 
+= ra.Next(100999).ToString();
        
return s;
    }
    
#endregion

    
#region 取得文件后缀
    
/**********************************
         * 函数名称:GetFileExtends
         * 功能说明:取得文件后缀
         * 参    数:filename:文件名称
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string url = @"
http://www.baidu.com/img/logo.gif";
         *          string s = o.GetFileExtends(url);
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 取得文件后缀
    
/// </summary>
    
/// <param name="filename">文件名称</param>
    
/// <returns></returns>
    public string GetFileExtends(string filename)
    {
        
string ext = null;
        
if (filename.IndexOf('.'> 0)
        {
            
string[] fs = filename.Split('.');
            ext 
= fs[fs.Length - 1];
        }
        
return ext;
    }
    
#endregion

    
#region 获取远程文件源代码
    
/**********************************
         * 函数名称:GetRemoteHtmlCode
         * 功能说明:获取远程文件源代码
         * 参    数:Url:远程url
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string url = @"
http://www.baidu.com/";
         *          string s = o.GetRemoteHtmlCode(url);
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 获取远程文件源代码
    
/// </summary>
    
/// <param name="url">远程url</param>
    
/// <returns></returns>
    public string GetRemoteHtmlCode(string Url)
    {
        
string s = "";
        MSXML2.XMLHTTP _xmlhttp 
= new MSXML2.XMLHTTPClass();
        _xmlhttp.open(
"GET", Url, falsenullnull);
        _xmlhttp.send(
"");
        
if (_xmlhttp.readyState == 4)
        {
            s 
= System.Text.Encoding.Default.GetString((byte[])_xmlhttp.responseBody);
        }
        
return s;
    }

    
#endregion

    
#region 保存远程文件
    
/**********************************
         * 函数名称:RemoteSave
         * 功能说明:保存远程文件
         * 参    数:Url:远程url;Path:保存到的路径
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string s = "";
         *          string url = @"
http://www.baidu.com/img/logo.gif";
         *          string path =Server.MapPath("Html/");
         *          s = o.RemoteSave(url,path);
         *          Response.Write(s);
         *          o.Dispose();         
         * *****************************
*/
    
/// <summary>
    
/// 保存远程文件
    
/// </summary>
    
/// <param name="Url">远程url</param>
    
/// <param name="Path">保存到的路径</param>
    
/// <returns></returns>
    public string RemoteSave(string Url, string Path)
    {
        Random ra 
= new Random();
        
string StringFileName = DateRndName(ra) + "." + GetFileExtends(Url);
        
string StringFilePath = Path + StringFileName;
        MSXML2.XMLHTTP _xmlhttp 
= new MSXML2.XMLHTTPClass();
        _xmlhttp.open(
"GET", Url, falsenullnull);
        _xmlhttp.send(
"");
        
if (_xmlhttp.readyState == 4)
        {
            
if (System.IO.File.Exists(StringFilePath))
                System.IO.File.Delete(StringFilePath);
            System.IO.FileStream fs 
= new System.IO.FileStream(StringFilePath, System.IO.FileMode.CreateNew);
            System.IO.BinaryWriter w 
= new System.IO.BinaryWriter(fs);
            w.Write((
byte[])_xmlhttp.responseBody);
            w.Close();
            fs.Close();
        }
        
else
            
throw new Exception(_xmlhttp.statusText);
        
return StringFileName;
    }
    
#endregion

    
#region 替换网页中的换行和引号
    
/**********************************
         * 函数名称:ReplaceEnter
         * 功能说明:替换网页中的换行和引号
         * 参    数:HtmlCode:html源代码
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string Url = @"
http://www.baidu.com/";
         *          strion HtmlCode = o.GetRemoteHtmlCode(Url);
         *          string s = o.ReplaceEnter(HtmlCode);
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 替换网页中的换行和引号
    
/// </summary>
    
/// <param name="HtmlCode">HTML源代码</param>
    
/// <returns></returns>
    public string ReplaceEnter(string HtmlCode)
    {
        
string s = "";
        
if (HtmlCode == null || HtmlCode == "")
            s 
= "";
        
else
            s 
= HtmlCode.Replace("\"""");
        s = s.Replace("\r\n""");
        
return s;
    }

    
#endregion

    
#region 执行正则提取出值
    
/**********************************
         * 函数名称:GetRegValue
         * 功能说明:执行正则提取出值
         * 参    数:HtmlCode:html源代码
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string Url = @"
http://www.baidu.com/";
         *          strion HtmlCode = o.GetRemoteHtmlCode(Url);
         *          string s = o.ReplaceEnter(HtmlCode);
         *          string Reg="<title>.+?</title>";
         *          string GetValue=o.GetRegValue(Reg,HtmlCode)
         *          Response.Write(GetValue);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 执行正则提取出值
    
/// </summary>
    
/// <param name="RegexString">正则表达式</param>
    
/// <param name="RemoteStr">HtmlCode源代码</param>
    
/// <returns></returns>
    public string GetRegValue(string RegexString, string RemoteStr)
    {
        
string MatchVale = "";
        Regex r 
= new Regex(RegexString);
        Match m 
= r.Match(RemoteStr);
        
if (m.Success)
        {
            MatchVale 
= m.Value;
        }
        
return MatchVale;
    }
    
#endregion

    
#region 替换HTML源代码
    
/**********************************
         * 函数名称:RemoveHTML
         * 功能说明:替换HTML源代码
         * 参    数:HtmlCode:html源代码
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string Url = @"
http://www.baidu.com/";
         *          strion HtmlCode = o.GetRemoteHtmlCode(Url);
         *          string s = o.ReplaceEnter(HtmlCode);
         *          string Reg="<title>.+?</title>";
         *          string GetValue=o.GetRegValue(Reg,HtmlCode)
         *          Response.Write(GetValue);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 替换HTML源代码
    
/// </summary>
    
/// <param name="HtmlCode">html源代码</param>
    
/// <returns></returns>
    public string RemoveHTML(string HtmlCode)
    {
        
string MatchVale = HtmlCode;
        
foreach (Match s in Regex.Matches(HtmlCode, "<.+?>"))
        {
            MatchVale 
= MatchVale.Replace(s.Value, "");
        }
        
return MatchVale;
    }

    
#endregion

    
#region 匹配页面的链接
    
/**********************************
         * 函数名称:GetHref
         * 功能说明:匹配页面的链接
         * 参    数:HtmlCode:html源代码
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string Url = @"
http://www.baidu.com/";
         *          strion HtmlCode = o.GetRemoteHtmlCode(Url);
         *          string s = o.GetHref(HtmlCode);
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 获取页面的链接正则
    
/// </summary>
    
/// <param name="HtmlCode"></param>
    
/// <returns></returns>
    public string GetHref(string HtmlCode)
    {
        
string MatchVale = "";
        
string Reg = @"(h|H)(r|R)(e|E)(f|F) *= *('|"")?((\w|\\|\/|\.|:|-|_)+)('|""| *|>)?";
        
foreach (Match m in Regex.Matches(HtmlCode, Reg))
        {
            MatchVale 
+= (m.Value).ToLower().Replace("href=""").Trim() + "||";
        }
        
return MatchVale;
    }
    
#endregion

    
#region 匹配页面的图片地址
    
/**********************************
         * 函数名称:GetImgSrc
         * 功能说明:匹配页面的图片地址
         * 参    数:HtmlCode:html源代码;imgHttp:要补充的http.当比如:<img src="bb/x.gif">则要补充http://www.baidu.com/,当包含http信息时,则可以为空
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string Url = @"
http://www.baidu.com/";
         *          strion HtmlCode = o.GetRemoteHtmlCode(Url);
         *          string s = o.GetImgSrc(HtmlCode,"
http://www.baidu.com/");
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 匹配页面的图片地址
    
/// </summary>
    
/// <param name="HtmlCode"></param>
    
/// <param name="imgHttp">要补充的http://路径信息</param>
    
/// <returns></returns>
    public string GetImgSrc(string HtmlCode, string imgHttp)
    {
        
string MatchVale = "";
        
string Reg = @"<img.+?>";
        
foreach (Match m in Regex.Matches(HtmlCode, Reg))
        {
            MatchVale 
+= GetImg((m.Value).ToLower().Trim(), imgHttp) + "||";
        }
        
return MatchVale;
    }
    
/// <summary>
    
/// 匹配<img src="" />中的图片路径实际链接
    
/// </summary>
    
/// <param name="ImgString"><img src="" />字符串</param>
    
/// <returns></returns>
    public string GetImg(string ImgString, string imgHttp)
    {
        
string MatchVale = "";
        
string Reg = @"src=.+\.(bmp|jpg|gif|png|)";
        
foreach (Match m in Regex.Matches(ImgString.ToLower(), Reg))
        {
            MatchVale 
+= (m.Value).ToLower().Trim().Replace("src=""");
        }
        
return (imgHttp + MatchVale);
    }

    
#endregion

    
#region 替换通过正则获取字符串所带的正则首尾匹配字符串
    
/**********************************
         * 函数名称:GetHref
         * 功能说明:匹配页面的链接
         * 参    数:HtmlCode:html源代码
         * 调用示例:
         *          GetRemoteObj o = new GetRemoteObj();
         *          string Url = @"
http://www.baidu.com/";
         *          strion HtmlCode = o.GetRemoteHtmlCode(Url);
         *          string s = o.RegReplace(HtmlCode,"<title>","</title>");
         *          Response.Write(s);
         *          o.Dispose();
         * *******************************
*/
    
/// <summary>
    
/// 替换通过正则获取字符串所带的正则首尾匹配字符串
    
/// </summary>
    
/// <param name="RegValue">要替换的值</param>
    
/// <param name="regStart">正则匹配的首字符串</param>
    
/// <param name="regEnd">正则匹配的尾字符串</param>
    
/// <returns></returns>
    public string RegReplace(string RegValue, string regStart, string regEnd)
    {
        
string s = RegValue;
        
if (RegValue != "" && RegValue != null)
        {
            
if (regStart != "" && regStart != null)
            {
                s 
= s.Replace(regStart, "");
            }
            
if (regEnd != "" && regEnd != null)
            {
                s 
= s.Replace(regEnd, "");
            }
        }
        
return s;
    }
    
#endregion


}
分享到:
评论

相关推荐

    C#中的Asp.net 数据采集基类

    C#中的Asp.net 数据采集基类(远程抓取,分解,保存,匹配) 分享

    Asp.net 数据采集基类(远程抓取,分解,保存,匹配)

    根据给定的文件标题、描述、标签以及部分内容,我们可以提炼出与ASP.NET数据采集相关的多个重要知识点,包括但不限于远程抓取、...而构建一个灵活、可扩展的数据采集基类,则是实现高效、稳定数据采集的关键步骤之一。

    视频采集基类 CaptureVideo

    "CaptureVideo"是一个视频采集基类,它集成了预览、压缩和采集等核心功能,这些功能是通过DirectShow框架来实现的。接下来,我们将深入探讨这个基类背后的原理和相关知识点。 **1. 视频采集基础** 视频采集是指将...

    视频采集的基类

    在IT行业中,视频采集是多媒体应用的一个重要组成部分,它涉及到从摄像头或者其他视频源获取实时的视频数据。在软件开发中,通常会通过创建一个基类来抽象和封装这些功能,以便于后续的扩展和复用。这个基类被称为...

    Delphi多线程实现数据采集的方法(含源码与文档).rar

    本资源"Delphi多线程实现数据采集的方法(含源码与文档).rar"提供了关于如何在Delphi中利用多线程进行数据采集的详细教程和实例代码。 首先,理解多线程的基本概念是至关重要的。在单线程程序中,所有的操作都按顺序...

    MFC单文档的telnet数据采集程序

    在这个场景中,提到的"MFC单文档的telnet数据采集程序"是一个利用MFC框架设计的应用,其主要功能是通过telnet协议进行数据采集。 首先,让我们详细了解一下MFC SDI。SDI是一种用户界面模式,其中每个文档都有自己的...

    基于ObjectARX自定义实体的地下管线前端数据采集系统设计

    ### 基于ObjectARX自定义实体的地下管线前端数据采集系统设计 #### 概述 随着城市建设的快速发展,城市地下管线系统日益复杂,如何有效地进行管线数据的采集、管理和更新成为亟待解决的问题。传统的管线数据采集...

    数据采集与网络爬虫课程复习资料.docx

    数据采集与网络爬虫课程复习资料 本节课程复习资料涵盖了 Python 编程语言的基础知识、数据采集和网络爬虫相关知识点。下面是从给定的文件中生成的相关知识点: 1. Python 基础知识 * Python 的标识符:40XL 是 ...

    Delphi利用多线程进行数据采集详解[参照].pdf

    在Delphi中,多线程技术是实现高效并发处理的关键,尤其在数据采集等需要大量计算或长时间等待的任务中。TThread类是Delphi提供的一个核心组件,它封装了Windows API中的线程创建和管理,使得开发者能更方便地进行多...

    完整版 Python高级开发课程 高级教程 05 Python数据采集 网络爬虫 网页爬虫.pptx

    课程分为多个模块,包括Python语言基础、数据结构、函数式编程、面向对象编程、数据采集(网络爬虫与网页爬虫)、数据库操作以及Web框架的应用。以下是各模块的重点内容: 1. **Python语言开发要点详解**: - 语法...

    CollThread_delphi_多线程_

    "CollThread_delphi_多线程_"这个标题暗示了我们讨论的是如何在Delphi中实现多线程数据采集。在这个实例中,开发者可能面临的问题是如何在不阻塞用户界面的情况下,有效地收集和处理大量数据。下面我们将深入探讨...

    基于PHP的天目MVC采集插件.zip

    5. **使用步骤**:用户可能需要解压文件,配置好数据库连接和其他必要设置,然后通过Web服务器运行此插件,根据提供的接口或控制台进行数据采集任务的启动和管理。如果插件提供API,还可以与其他系统集成,实现自动...

    CollThread_delphi_delphi多线程_多线程_

    本文将深入探讨Delphi中的多线程技术,以及如何利用它来实现数据采集和显示。 标题"CollThread_delphi_delphi多线程_多线程_"暗示了这是一个关于Delphi平台下多线程编程的实例,可能是一个名为“CollThread”的项目...

    java远程采集器

    【Java远程采集器】是指利用Java的远程方法调用(Remote Method Invocation, RMI)技术,使得客户端可以访问和操作远程服务器上的对象。RMI是Java提供的一种分布式计算能力,它允许程序跨越网络调用另一个JVM上的...

    毕设项目:基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能.zip

    例如,在数据表编辑界面上,一些字段是必填字段,就可以在初始化界面时为这些字段的关联显示组件定义一个新的required属性,并设置值为“true"。 4.类的附加信息 属性系统还有一个宏Q_CLASSINFO(),可以为类的元...

    ac6111AD采集卡运行程序用MFC编写

    在现代电子测量与控制系统中,数据采集卡扮演着至关重要的角色。AC6111AD是一款广泛应用的高精度数据采集设备,其运行程序的开发往往涉及到复杂的硬件交互与软件设计。本文将重点探讨使用MFC(Microsoft Foundation ...

    Baser相机图像采集C++代码

    Baser相机图像采集C++代码相关知识点: 1. Basler相机:Basler是一家知名的德国相机制造商,其产品广泛应用于工业、医疗、科研等领域。Basler相机支持多种接口,包括GigE、USB3 Vision等,并且支持多种操作系统。在...

    RSR32串行端口通信数据采集工具的设计与实现

    文中基于各种通信端口数据转发采集为目的,以RSR32串口为研究对象,对两个任意独立模块通信数据采集进行分析。通过C++语言定义一个通信端口基类,然后在基类基础上派生出各种比如RS232,socket之类的实现,从而得到...

    Delphi_多线程实例.doc

    在Delphi编程中,多线程技术是提升应用程序性能的关键,尤其是在处理耗时操作时,如数据采集、后台计算等。本实例将通过一个简单的例子来阐述如何创建和使用多线程。 首先,我们创建一个新的Form,在Form上放置两个...

Global site tag (gtag.js) - Google Analytics