我在两个字符串之间获取文本的功能是找不到正确的单词

时间:2016-12-16 19:20:48

标签: c#

我正在创建一个获取网站信息的应用程序。我一直在尝试从HTML标签获取信息的几种方法。该网站是who.is,我正在尝试获取有关Google的信息(作为测试!)来源可以在view-source上找到:https://who.is/whois/google.com/< (如果使用Chrome浏览器)

现在的问题是我试图获取网站创建者的名称(马克或其他东西),但我没有收到正确的结果。我的代码:

 //GET name
            string getName = source;
            string nameBegin = "<div class=\"col-md-4 queryResponseBodyKey\">Name</div><div class=\"col-md-8 queryResponseBodyValue\">";
            string nameEnd = "</div>";
            int nameStart = getName.IndexOf(nameBegin) + nameBegin.Length;
            int nameIntEnd = getName.IndexOf(nameEnd, nameStart);
            string creatorName = getName.Substring(nameStart, nameIntEnd - nameStart);
            lb_name.Text = creatorName;

(来源包含页面的html)

这并没有提出正确的答案......我认为这与我使用[\]因为多个“”的事实有关......

我做错了什么? :(

2 个答案:

答案 0 :(得分:2)

不要手动解析html结果,而是使用真正的html解析器,如HtmlAgilityPack

using (var client = new HttpClient())
{
    var html = await client.GetStringAsync("https://who.is/whois/google.com/");
    var doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    var nodes = doc.DocumentNode.SelectNodes("//*[@class='col-md-4 queryResponseBodyKey']");

    var results = nodes.ToDictionary(n=>n.InnerText, n=>n.NextSibling.NextSibling.InnerText);

    //print
    foreach(var kv in results)
    {
        Console.WriteLine(kv.Key + " => " + kv.Value);
    }
}

答案 1 :(得分:0)

 string getName = "<div class=\"col-md-4 queryResponseBodyKey\">Name</div><div class=\"col-md-8 queryResponseBodyValue\">";
        string nameBegin = "<div class=\"col-md-4 queryResponseBodyKey\">";
        string nameEnd = "</div>";
        int nameStart = getName.IndexOf(nameBegin) + nameBegin.Length;
        int nameIntEnd = getName.IndexOf(nameEnd, nameStart);
        string creatorName = getName.Substring(nameStart, nameIntEnd - nameStart);
        //lb_name.Text = creatorName;

        Console.WriteLine(creatorName);
        Console.ReadLine();

这是你在寻找什么,从那个div获得名字?