webservice+linq

一、 在网页爬数据

     1、先获得页面的所有html文本

     2、用正则表达式确定需要抓取的数据

     3、用IsMatch方法获得匹配的数据后存盘

        int pagesize = Convert.ToInt32(txtPageSize.Text.Trim());//获取到总共有多少页

        WebClient wc = new WebClient();       //创建实例

        wc.Encoding = Encoding.Default;       //确定编码方式

        for (int i = 1; i <= pagesize; i++)      //循环指定页码数的次数

        {

            string url = txtUrl.Text.Trim() + "?pn=";         //URL上加上get传参的方式传递页码

            if (string.IsNullOrEmpty(txtUrl.Text.Trim()))    //判断是否输入URL

            {

                return;

            }

            url += i;    //加页码

            、、string html = wc.DownloadString(url);    //获取到当前页的html内容

            MatchCollection mc = Regex.Matches(html, @"[1-9][0-9]{4,11}@(qq|QQ).com");   //匹配正则表达式

            StringBuilder sb = new StringBuilder();

            foreach (Match m in mc)    //对获得的正则匹配结果做循环处理

            {

                sb.AppendLine(m.Value + ";");   //每一个匹配的结果做一行数据处理

            }

            string s = sb.ToString();          //StringBuilder转为字符串

            File.AppendAllText(@"d:1.txt", s, Encoding.Default);    //把字符串追加保存在文本文件中

        }

二、webservice

    1、用于不同的系统之间的数据通信。

    2、实例

       A、在web服务项目中添加【web服务(asmx)】类文件。

       B、如果web服务需要验证时在web服务开始时做用户名/密码的验证。

       C、调用web服务

          1)线添加相关web服务的引用:

              引用-->添加服务引用-->高级-->添加web引用-->指定服务的url-->指定web引用名称-->添加引用

          2) 当修改了web服务内容时除了重新生成外,需要更新web服务:

              Web Referrences中找web服务项-->点击更新web服务

       D、火车时刻表web服务实例:traintime

          traintime.TrainTimeWebService s = new traintime.TrainTimeWebService();    //创建服务实例

          string strStart = txtStart.Text.Trim();     //接受始发站

          string strEnd = txtEnd.Text.Trim();         //接受终点站

          DataTable dt = s.getStationAndTimeByStationName(strStart, strEnd, "").Tables[0];  //获得表结构的结果集

          GridView1.DataSource = dt;     //结果集指定为GridView的数据源

          GridView1.DataBind();          //绑定GridView

       E、飞机时刻表web服务:airtime

          airtime.DomesticAirline d = new airtime.DomesticAirline();

          string strStart = txtStart.Text.Trim();     //接受始发机场

          string strEnd = txtStart.Text.Trim();       //接受到达机场

          string strFromTime = txtStart.Text.Trim();  //接受起飞日期范围的开始日期

          string strToTime = txtStart.Text.Trim();    //接受起飞日期范围的结束日期

          DataTable dt = d.getDomesticAirlinesTime(strStart, strEnd,strFromTime,strToTime).Tables[0];  //获取结果集

          GridViewataSource = dt;       //结果集指定为GridView的数据源

          GridView1.DataBind();         //绑定GridView

       F、发布方法

           与其他页面的发布时一样的,然后使用时直接告诉url就可以。

    

三、Linq

    1、概念

       LINQ对任何数据类型的集合进行筛选的操作,如:数组,集合,哈希表,字典之类的数据都可以用LINQ来筛选。

    2、实例

       A、List<string> names = new List<string> { "ni", "dsad", "Jsdsds", "fsd" };

          var nameWithJ = from n1 in names where n1.StartsWith("J") orderby n1 select n1;

               //在names集合中取出以[J]开头的所有元素

               //n1 in names:表示n1是遍历names集合用的临时变量

               //from n1 in names:表示数据源就是names的集合

               //where n1.StartsWith("J"):筛选条件是n1当中第一字符为[J]的

               //orderby n1:排序方式是以n1中的内容

               //select n1:筛选结果返回的字段序列

    

       B、List<Racer> rs = new List<Racer>() {             //创建一个对象集合

              new Racer{Wins = 21, Country = "China"},new Racer{Wins=11,Country="China"},

              new Racer{Wins=14,Country="USA"},new Racer{Wins=22,Country="China"},

              new Racer{Wins=21,Country="China"},new Racer{Wins=35,Country="China"},

              new Racer{Wins=44,Country="China"},new Racer{Wins=66,Country="USA"},

              new Racer{Wins=44,Country="Japan"}};

          var rs1 = from r in rs                        //对rs对象集合为数据源

                    group r by r.Country into g         //以Country作为group by的分组因素,结果放入对象g中

                    orderby g.Count() descending, g.Key //根据Count排序,当Count相同的时候根据Key排序

                    where g.Count() >= 2                //只要累计数量大于等于2的

                    select new{KeyName=g.Key ,Count=g.Count()};   //返回有两个字段KeyName和Count的对象集合

    

            foreach (var r in rs1)          //遍历查询结果集

            {

                Console.WriteLine(r.KeyName.ToString());    //显示返回结果集的第一个字段值

                Console.WriteLine(r.Count.ToString());      //显示返回结果集的第二个字段值

            }

原文地址:https://www.cnblogs.com/huang3/p/4962654.html