jQuery では可能だと思いますが、ASP.NET サーバー側コードは私の状況にも適しています。
jQueryを使用すると、たとえばdivにページをロードし、divを<title>
タグでフィルタリングできますが、重いページの場合、最初にすべてのコンテンツを読み取ってからタイトルタグを読み取るのは良くないと思います..または多分それは持っています非常に簡単な解決策?とにかく、インターネットからそれについて何も見つけることができませんでした。ありがとう
cjjerとBooのおかげで、正規表現について詳しく読んだばかりで、ついに以下のコードが機能しています。
Dim qq As New System.Net.WebClient
Dim theuri As New Uri(TextBox1.Text)
Dim res As String = qq.DownloadString(theuri)
Dim re As Regex = New Regex("<title\b[^>]*>(.*?)</title>", RegexOptions.Singleline)
Dim ma As Match = re.Match(res)
If Not ma Is Nothing And ma.Success Then
Response.Write(ma.Groups(1).Value.ToString())
Else
Response.Write("error")
End If
しかし、とにかく、問題は残っています。このコードはページ全体をダウンロードして検索します。1つの重いWebサイトが完了するまでに、2〜3秒以上かかりましたが、私が知る限り、これが唯一の方法のようです:| このコードを改良するための提案はありますか?
cjjerはほぼ正解しました。
まず、正規表現を次のように変更します。<title>(?<Content>.*?)?</title>
次に、最初に一致オブジェクトを作成する必要があります (URI にタイトルがない場合に備えて)。
Match tMatch = new RegEx(@"<title>(?<Content>.*?)?</title>").Match(new System.Net.WebClient().DownloadString(url));
if ((null != tMatch) && (tMatch.IsSuccess)) {
// yay.
title = tMatch.Groups("Content").value;
}
タイトルは通常、最初の数百バイト以内に表示されるため、最初の 1KiB 程度の範囲リクエストを試行し、それを解析してみてください (一部の終了タグが欠落しているため、エラー修正パーサーを使用)。ページ全体を読み込みます。
タイトルを読み取るためだけに、他の Web ページを自分のページにロードすることはセキュリティ上のリスクになります... サーバー側のスクリプト (asp.net、php、...) でこれを行い、タイトルを Web に出力するだけです。ページ。リクエストごとにシームレスにタイトルを取得できるため、ある種のキャッシングのこと。
外部ページのタイトルを取得する簡単でクリーンな方法はありません。WebClient
を使用して応答を解析するサーバー側で実行できます。
ただし、要件を確認する価値があるかもしれません。それが本当に必要かどうか、生成される余分なトラフィックとレイテンシがどれくらいかということです。また、必要なのはタイトルだけであることに気付いていない外部サイトで負荷が発生している可能性があることも考慮してください。ページの作成にはかなりの費用がかかる可能性があります。
string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString();
試してみてください。よくわかりません。
すべてのサーバーがこれをサポートしているかどうかはわかりません。
これが役立つかどうかを確認してください
char[] data = new char[299];
System.Net.HttpWebRequest wr =(HttpWebRequest)WebRequest.Create("http://www.yahoo.com");
wr.AddRange("bytes", 0, 299);
HttpWebResponse wre = (HttpWebResponse)wr.GetResponse();
StreamReader sr = new StreamReader(wre.GetResponseStream());
sr.Read(data, 0, 299);
Console.WriteLine((data));
sr.Close();
編集:ネットワーク監視ツールでチェックして、サーバーが送信するテキストが何であるかを調べてください。フィドラーを使用して出力を確認し、コンソールに書き込みました。
EDIT2: タイトルがページの先頭にあると想定しています。