现在我们来实现一个输入一个单词,获取它的相关词组
效果演示:
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();
}