Note(11):C#实现对有道词典有效数据的获取

现在我们来实现一个输入一个单词,获取它的相关词组


效果演示:


step1:实现这个代码之前,先介绍代码体系。


step2:方法2不再介绍,Note9已经介绍过了。先来介绍GetHtml方法。 

static public string GetHtml()
        {

            WebClient MyWebClient = new WebClient();
            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向                                                                                Internet资源的请求进行身份验证的网络凭据
            string word = Console.ReadLine();
            string url = "http://dict.youdao.com/search?q=" + word;
            Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
            string pageHtml = Encoding.UTF8.GetString(pageData);
            return pageHtml;
        }

        这段代码是将读到的数据,加到网站后面,然后从网站上获取资源,最后将资源存放到pagehtml变量里,返回过来。


step3:再来介绍GetPhrase_MeaningsData方法。这里主要是从pageHtml数据中,分离出我们所需要的数据。

static public string GetPhrase_MeaningsData(string BeginString1, string EndString1, string BeginString2, string EndString2)
        {

            string pronstr = Program.GetHtml();
            string beginpronstr = pronstr;
            ArrayList locationlistPhrase = Program. GetArrayList(pronstr, BeginString1);
            ArrayList locationlistMeaning = Program.GetArrayList(pronstr, BeginString2);
            int[] pp1 = new int[locationlistPhrase.Count];
            int[] pp2 = new int[locationlistPhrase.Count];
            string[] ppdata = new string[locationlistPhrase.Count];
            string[] mmdata = new string[locationlistMeaning.Count];
            int[] mmF = new int[locationlistMeaning.Count];
            int[] mmL = new int[locationlistMeaning.Count];
            string[] meanings = new string[locationlistMeaning.Count];

            string phone = "";
            string phrase_phone = "";

            string meaning = "";

            int count;

            for (int i = 0; i < pp1.Length; i++)
            {

                pp1[i] = int.Parse(locationlistPhrase[i].ToString());
                if (pp1[i] > 0)
                {
                    count = pronstr.Length;
                    pronstr = pronstr.Substring(pp1[i]);//这里是剩余变量
                    mmF[i] = pronstr.IndexOf("</a></span>");//这里是意思的首地址
                    mmL[i] = pronstr.IndexOf("</p>");//这里是意思的尾地址
                    meanings[i] = pronstr.Substring(mmF[i], mmL[i] - mmF[i]);//取首位
                    meanings[i] = meanings[i].Replace("</a></span>", "");
                    meanings[i] = meanings[i].Replace("</p>", "");
                    meanings[i] = meanings[i].Replace(" ", "");
                    meanings[i] = meanings[i].Replace("\n", "");
                    pronstr = pronstr.Replace(BeginString1, "");
                    pp2[i] = pronstr.IndexOf(EndString1);
                    if (pp2[i] > 0)
                    {

                        phone = pronstr.Substring(0, pp2[i]) + "     ";

                    }
                }

                ppdata[i] = phone;
                pronstr = beginpronstr;
            }
            for (int i = 0; i < ppdata.Length; i++)
            {

                phrase_phone += ppdata[i] + "\r\n";

            }

            return phrase_phone;

        }


源代码如下:

  static public string GetHtml()
        {

            WebClient MyWebClient = new WebClient();
            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
            string word = Console.ReadLine();
            string url = "http://dict.youdao.com/search?q=" + word;
            Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
            string pageHtml = Encoding.UTF8.GetString(pageData);
            return pageHtml;
        }
       static public ArrayList GetArrayList(string html, string begincontent)
        {

            ArrayList arrayList = new ArrayList();
            string a = html;
            string b = begincontent;
            int pos = a.IndexOf(b);
            while (pos > -1)
            {
                arrayList.Add(pos);
                pos += b.Length;
                if (pos >= a.Length) break;
                pos = a.IndexOf(b, pos);
            }
            return arrayList;
        }
       static public string GetPhrase_MeaningsData(string BeginString1, string EndString1, string BeginString2, string EndString2)
        {

            string pronstr = Program.GetHtml();
            string beginpronstr = pronstr;
            ArrayList locationlistPhrase = Program. GetArrayList(pronstr, BeginString1);
            ArrayList locationlistMeaning = Program.GetArrayList(pronstr, BeginString2);
            int[] pp1 = new int[locationlistPhrase.Count];
            int[] pp2 = new int[locationlistPhrase.Count];
            string[] ppdata = new string[locationlistPhrase.Count];
            string[] mmdata = new string[locationlistMeaning.Count];
            int[] mmF = new int[locationlistMeaning.Count];
            int[] mmL = new int[locationlistMeaning.Count];
            string[] meanings = new string[locationlistMeaning.Count];

            string phone = "";
            string phrase_phone = "";

            string meaning = "";

            int count;

            for (int i = 0; i < pp1.Length; i++)
            {

                pp1[i] = int.Parse(locationlistPhrase[i].ToString());
                if (pp1[i] > 0)
                {
                    count = pronstr.Length;
                    pronstr = pronstr.Substring(pp1[i]);//这里是剩余变量
                    mmF[i] = pronstr.IndexOf("</a></span>");//这里是意思的首地址
                    mmL[i] = pronstr.IndexOf("</p>");//这里是意思的尾地址
                    meanings[i] = pronstr.Substring(mmF[i], mmL[i] - mmF[i]);//取首位
                    meanings[i] = meanings[i].Replace("</a></span>", "");
                    meanings[i] = meanings[i].Replace("</p>", "");
                    meanings[i] = meanings[i].Replace(" ", "");
                    meanings[i] = meanings[i].Replace("\n", "");
                    pronstr = pronstr.Replace(BeginString1, "");
                    pp2[i] = pronstr.IndexOf(EndString1);
                    if (pp2[i] > 0)
                    {

                        phone = pronstr.Substring(0, pp2[i]) + "     ";

                    }


                }

                ppdata[i] = phone;
                pronstr = beginpronstr;
            }


         
            for (int i = 0; i < ppdata.Length; i++)
            {

                phrase_phone += ppdata[i] + "\r\n";

            }

            return phrase_phone;

        }
       static void Main(string[] args)
        {
            string phone;
            phone =Program. GetPhrase_MeaningsData("dict.basic.wordgroup\">", "</a>", "</a></span>", "</p>");
            Console.WriteLine(phone);
            Console.ReadLine();
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值