簡體   English   中英

如何始終獲得網站標題而不下載所有頁面源代碼

[英]How to always get the website title without downloading all the page source

是的,乍一看,我同意這看起來與以下內容完全相同:

說實話...這個問題與那兩個極端相關。 但是,我注意到在研究這個特定主題時,到目前為止發現的幾乎所有鏈接中的代碼都有缺陷。

以下是一些其他鏈接,它們與內容中的上述鏈接相似:

如果必須知道,則可以使用此鏈接中概述的此特定方法來獲取頁面的URL,但我認為這無關緊要:

第一個鏈接中的代碼運行良好,盡管存在一個大問題:

例如,如果我從以下站點獲取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;
    }
}

它返回一個空白結果,或者為空。 但是,當觀察頁面的HTML代碼時,title標簽肯定在那兒。

因此,我的問題是:如何從我擁有的修改后的代碼中,或者從顯示的其他四個鏈接中的任何一個中,修改或糾正代碼,以從具有title標簽的所有網頁中獲取網頁標題,一個示例是該問題的最后一個鏈接,即DotNetPerls的一個鏈接。

我只是在猜測,但是我想知道該網站的顯示方式是否與其他典型網站不同,例如,也許在您首次加載時它沒有顯示任何代碼,但是瀏覽器實際上是在透明地首次加載后重新加載了該網站...

如果可能的話,我希望提供一些工作示例代碼的答案。

它與標題不匹配,因為該流實際上是原始流,在這種情況下,已將其壓縮。 (在循環內添加Console.WriteLine(contents)以查看)。

要使流自動解壓縮,請執行以下操作:

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; 

(自動減壓解決方案取自此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM