文档章节

html脚本解释器-【c#】

开飞色
 开飞色
发布于 06/14 22:53
字数 698
阅读 53
收藏 1

几年前刚学c#写的 解析类发出来


namespace 采集脚本_1
{
    
    class zd
    {
        爬虫类 pa=new 爬虫类();
        http_post post_1=new http_post() ;
        http_get get_1 = new http_get();
        public string get_x(string url,string cookies)
        {
            string y_data=pa.get网页源码(url,"",cookies,"get");
            return y_data;
        }
        public string post_x(string url, string data, string cookies)
        {
            string y_data = pa.get网页源码(url, data, cookies, "post");
            return y_data;
        }
        public ArrayList xpath_s(string data,string xpath,string ads)
        {
            ArrayList xp_list_1 = new ArrayList();
            HtmlNodeCollection txt=pa.解析html多(data,xpath);
            foreach(HtmlNode htm in txt)
            {
                if (ads != "")
                { xp_list_1.Add(htm.Attributes[ads].Value); }
                else { xp_list_1.Add(htm.InnerText); }
            }
            return xp_list_1;
        }  
        #region 单个html处理
        /// <summary>
        /// 处理单个html
        /// </summary>
        /// <param name="data"></param>
        /// <param name="xpath"></param>
        /// <returns></returns>
        public string xpath_d(string data,string xpath)
        {
            string s_data=pa.解析html单(data,xpath);
            return s_data;
        }
#endregion
        #region 载入脚本
        /// <summary>
        /// 初始化载入脚本
        /// </summary>
        /// <returns></returns>
        public HtmlNodeCollection load(string bane)
        {
            HtmlNodeCollection ini;
            string data_io = bane;
            ini = pa.解析html多(data_io, "//node/node");
            return ini;
        }
        #endregion
        #region 异常处理
        public void end(string k, TextBox a)
        {
            a.AppendText(k + "\n");
        }
        #endregion
        /// <summary>
        /// 逐行解析脚本
        /// </summary>
        /// <param name="jx_list"></param>
        public void jx(HtmlNodeCollection jx_list,string q_data,ArrayList q_list,TextBox tex,Timer tim,string canshu)
        {
            if (jx_list != null)
            {
                foreach (HtmlNode dd in jx_list)
                {
                    string jx_name = dd.Attributes["name"].Value;
                    switch (jx_name)
                    {
                        case "http_post"://post读取网页
                            http_post post = new http_post();
                            post.http_url = dd.Attributes["url"].Value;
                            post.http_data = dd.Attributes["data"].Value;
                            post.http_cookies = dd.Attributes["cookies"].Value;
                            q_data = post_x(post.http_url, post.http_data, post.http_cookies);
                            break;
                        case "http_get"://get读取网页
                            http_get get = new http_get();
                            get.http_url = dd.Attributes["url"].Value.Replace("【i】",canshu);
                            get.http_cookies = dd.Attributes["cookies"].Value;
                            q_data = get_x(get.http_url, get.http_cookies);
                            break;
                        case "xpath_d"://单个解析xpath
                            string s_xpath_1 = dd.Attributes["xpath"].Value;
                            q_data = xpath_d(q_data, s_xpath_1);
                            break;
                        case "xpath_s"://多个解析xpath
                            string s_xpath = dd.Attributes["xpath"].Value;
                            string iff = dd.Attributes["if"].Value;
                            q_list = xpath_s(q_data, s_xpath,iff);
                            break;
                        case "w"://输出信息
                            string sta = dd.Attributes["state"].Value;
                            string atrin = dd.Attributes["string"].Value.Replace("【i】",canshu);
                            if (sta == "str")
                            {
                                tex.Invoke(new MethodInvoker(delegate{end(atrin + q_data, tex);}));

                            }
                            else if (sta == "data") { tex.Invoke(new MethodInvoker(delegate { end(atrin, tex); })); }
                            else
                            {
                                tex.Invoke(new MethodInvoker(delegate
                                {
                                    foreach (string ss in q_list)
                                    {
                                        end(ss, tex);
                                    }
                                }));
                            }
                            break;
                        case "for":
                            forr forr = new forr();
                            string s_sub = dd.Attributes["sub"].Value;
                            int ine = 0;
                            if (s_sub == "cont")
                            {
                                endfor(q_list.Count, dd.InnerHtml, q_data, q_list, tex, tim,ine);
                            }
                            else
                            {
                                endfor(int.Parse(s_sub), dd.InnerHtml, q_data, q_list, tex, tim,ine);
                            }
                            break;
                        case "clear":
                            string zdd=dd.Attributes["attribute"].Value;
                            if (zdd == "list")
                            {
                                q_list.Clear();
                            }
                            else {
                                q_data = "";
                            }
                            break;
                        case "clean":
                            tex.Text = "";
                            break;
                        case "time":
                            q_data = DateTime.Now.ToString();
                            break;
                        case "timer":
                            string tine=dd.Attributes["int"].Value;
                            int m = (1000 * 60) * int.Parse(tine);
                            tim.Interval = m;
                            tim.Enabled = true;
                            break;
                        case "io":
                            //q_data = dd.Attributes[""]
                            break;

                    }
                }
            }
            else { end("初始化脚本错误!!!", tex); }
        }

        /// <summary>
        /// 循环 处理
        /// </summary>
        /// <param name="cs"></param>
        /// <param name="nr_data"></param>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <param name="d"></param>
        /// <param name="f"></param>
        /// <param name="ino"></param>
        public void endfor(int cs,string nr_data,string b,ArrayList c,TextBox d,Timer f,int ino)
        {
            for (int j = 0; j < cs;j++ )
            {
                ino = j;
                HtmlNodeCollection htmll=pa.解析html多(nr_data, "//node");
                if(htmll!=null)
                {
                    jx(htmll, b, c, d,f,j.ToString());   
                    
                }
            }
        }

    }
    public class http_post
    {
        public string http_url { set; get; }
        public string http_cookies { set; get; }
        public string http_data { set; get; }
    }
    public class http_get
    {
        public string http_url { set; get; }
        public string http_cookies { set; get; }
    }
    public class forr
    {
        /// <summary>
        /// 次数
        /// </summary>
        public int i { set; get; }//次数
        /// <summary>
        /// 下标
        /// </summary>
        public int a { set; get; }//列表下标
    }
}

为什么叫html解释器呢,因为利用了html节点树解析,也可以利用别的结构 例如xml 或者自己实现解析 。 下面是运行时状态

© 著作权归作者所有

共有 人打赏支持
开飞色
粉丝 15
博文 59
码字总数 24885
作品 0
昆明
程序员
编译型语言、解释型语言、脚本语言之间的区别与联系

任何语言都必须翻译成机器语言,计算机才能运行高级语言编写的程序。 翻译的方式有两种:一个是编译,一个是解释。 1.编译型语言 编译型语言写的程序在被执行之前,需要一个专门的编译过程,...

威士忌de碎冰
2017/12/02
0
0
编译性语言、解释性语言和脚本语言的区别

一、翻译和解释的不同 翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,...

旋转木马-千里马
2016/01/08
404
0
python浓缩(1)欢迎来到Python世界!

1.1 什么是python Python 是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。 1.2 起源 范·罗萨姆期望的工具有一些是用于完成日...

人生如梦19
2016/04/09
157
0
编译型语言和解释型语言(一)

首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写...

HaleyLiu
2017/10/22
0
0
什么是编译性语言、解释性语言和脚本语言

什么是编译性语言、解释性语言和脚本语言   计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序。  翻译的方式有...

AlphaJay
2010/08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

docker多容器部署lnmp环境

环境:RHEL7.5 ip:192.168.10.102,主机名:lb02 一、创建web、数据库目录 web网站目录为:/wwwroot,属主属组:www [root@lb02 ~]# mkdir /wwwroot[root@lb02 ~]# useradd -s /sbin/nolo...

人在艹木中
11分钟前
0
0
eclipse运行springboot项目报错‘找不到或无法加载主类’

这是一个很烦躁的问题~,往往困住大家好长时间,然后各种百度。借此,咱将这个问题有可能产生的原因进行一下总结。若有不完善之处欢迎大家在下面留言指出~~ Duang!问题出现 然后开始尝试解决...

Code辉
32分钟前
0
0
springboot oauth2 跨域设置

@Overridepublic void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/security/**") .authentica......

昆虫大侠
34分钟前
0
0
08-利用思维导图梳理JavaSE-泛型

08-利用思维导图梳理JavaSE-泛型 主要内容 1.泛型的基本概念 1.1.定义 1.2.使用前提 1.3.使用泛型的好处 2.泛型的使用 2.1.泛型类定义 2.2.泛型对象定义 2.3.泛型中的构造方法 2.4.泛型方法的...

飞鱼说编程
36分钟前
0
0
Docker 部署 Spring Boot 项目指南

仅想在Docker里运行一个Spring Boot项目,捣鼓了许久。。。 本文主要适用于Windows环境下的Docker 一、运行环境 Windows 10 Maven 3.5 Docker 18.06.1-ce-win73 (19507) 二、创建Spring Boot...

AmosWang
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部