如何在不下载所有页面源的情况下始终获取网站标题

时间:2015-08-27 04:31:33

标签: c# winforms .net-4.0

是的,我会同意,乍一看,这看起来完全像以下一样:

说实话......这个问题与这两个问题密切相关。但是,我注意到,在研究这个特定主题时,到目前为止我发现的链接中存在一个代码缺陷。

以下是其他一些与内容中的上述链接相似的链接:

如果必须知道,我正在使用此特定方法获取页面的URL,如此链接中所述,但我认为这无关紧要:

第一个链接的代码效果很好,尽管有一个大问题:

例如,如果我从此网站获取网址:http://www.dotnetperls.com/imagelist

并将其传递给代码,我在下面有一个修改后的版本:

private static string GetWebPageTitle(string url)
{
    HttpWebRequest request = (HttpWebRequest.Create(url) as HttpWebRequest);
    HttpWebResponse response = (request.GetResponse() as HttpWebResponse);
    using (Stream stream = response.GetResponseStream())
    {
        // compiled regex to check for <title></title> block
        Regex titleCheck = new Regex(@"<title>\s*(.+?)\s*</title>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
        int bytesToRead = 8092;
        byte[] buffer = new byte[bytesToRead];
        string contents = "";
        int length = 0;
        while ((length = stream.Read(buffer, 0, bytesToRead)) > 0)
        {
            // convert the byte-array to a string and add it to the rest of the
            // contents that have been downloaded so far
            contents += Encoding.UTF8.GetString(buffer, 0, length);

            Match m = titleCheck.Match(contents);
            if (m.Success)
            {
                // we found a <title></title> match =]
                return m.Groups[1].Value.ToString();
                break;
            }
            else if (contents.Contains("</head>"))
            {
                // reached end of head-block; no title found =[
                return null;
                break;
            }
        }
        return null;
    }
}

它返回一个空白结果,或者为null。但是,在观察页面的HTML代码时,标题标签肯定存在。

因此,我的问题是:如何修改或更正代码,从我所修改的代码,或从所提供的任何其他四个链接,也从所有具有该代码的网页获取网页标题标题标签存在,一个例子是这个问题中的最后一个链接,来自DotNetPerls。

我只是在猜测,但我想知道网站是否与其他典型网站显示不同,也许它在第一次加载时可能没有显示任何代码,但浏览器实际上在加载后重新加载网站第一次透明......

如果可能,我更愿意使用一些有效的示例代码。

0 个答案:

没有答案