文档章节

html脚本解释器-【c#】

开飞色
 开飞色
发布于 06/14 22:53
字数 698
阅读 40
收藏 1
点赞 0
评论 0

几年前刚学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 或者自己实现解析 。 下面是运行时状态

© 著作权归作者所有

共有 人打赏支持
开飞色
粉丝 12
博文 53
码字总数 24207
作品 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
Python与C#对比 python学习

Python是一种跨平台语言。无论是在Windows、Linux、Unix还是Mac Os系统,我们都可以使用Python。甚至在Linux、Unix及Mac OS系统内已经集成了Python。语法简洁优美, 简单,易学。拥有强大的标...

zhouzhou2018
05/23
0
0
Dart 之于 JavaScript 正如 C# 之于 C++

版权声明:本文为 OSChina.NET 原创编译 转载务必注明出处,并保留链接! Dart之于JavaScript正如C #之于C++ 在谷歌工程师拉尔斯·巴克(Lars Bak)的V8 JavaScript解释器颠覆了Firefox所宣称...

虫虫
2011/10/20
3.4K
22
10 个平板电脑上的 Python 编辑器

本文介绍 10 个可在 iOS 或 Android 平板电脑上的 Python 编程环境。Python 开发者可通过这些工具实现随时随地编码,蛋疼抑或爽极? Pythonista Python 声称将实现 “在你的iPad或iPhone实现...

oschina
2013/05/01
21.8K
20
使用 Phalanger 整合 PHP 和 .Net

Phalanger 是一种 PHP 语言编译器,也是针对 .NET 的 PHP 运行时。 它可以用于把 PHP web 项目编译成 .NET 字节码,并在 Windows 中使用 IIS 或者在 Linux 上使用 Mono 和 Apache 作为 ASP....

墙头草
2012/04/11
1K
14
全新的.NET解释器 - Mono已经到来

Mono通过新的运行代码方式,完善了自己的即时编译器和静态编译器。 2001年,Mono项目正式开始,Mono开发团队为.NET指令集编写了一个解释器,用于在Linux上引导一个自托管的.NET开发环境。 当...

powertoolsteam
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

自定义OkHttp的UA

背景 上次的问题很明显 由于我们的ua清一色OkHttp导致快速定位到内部应用。 既然如此我们是否考虑可以在UA上做点手脚。 自定义我们的UA呢??? 分析 首先UA在 均为okhttp/3.2.0 大概率是由于...

Mr_Qi
13分钟前
0
0
【scikit-learn】01:使用案例对sklearn库进行简单介绍

sklearn学习笔记:Quick Start 源地址:http://scikit-learn.org/stable/tutorial/basic/tutorial.html # -*-coding:utf-8-*-''' Author:kevinelstri Datetime:2017.2.16'''......

wangxuwei
17分钟前
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
19分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
39分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
45分钟前
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
2
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部