[英]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.