如何阅读外部页面的标题?

时间:2009-03-01 09:16:25

标签: asp.net jquery external title

我认为使用jQuery是可能的,但任何ASP.NET服务器端代码也适用于我的情况。

使用jQuery我可以将页面加载到例如div,并过滤div <title>标记,但我认为对于重页面,首先阅读所有内容然后阅读标题标签.. 或者它有一个非常简单的解决方案?无论如何,我无法从互联网上找到任何相关信息。 感谢

7 个答案:

答案 0 :(得分:2)

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;
}

答案 1 :(得分:2)

好的,感谢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

但无论如何,问题仍然存在,这段代码正在下载整个页面并通过它寻找,这个重型网站花了超过2或3秒才完成,但据我所知,这似乎是唯一的方法: | 有什么建议可以改进这段代码吗?

答案 2 :(得分:1)

标题通常出现在前几百个字节内,因此您可以尝试对第一个1KiB左右的范围请求,尝试解析(使用纠错解析器,因为某些结束标记将丢失)并且如果失败回到加载整个页面。

答案 3 :(得分:0)

将任何其他网页加载到您的网页中只是为了读取标题会有安全风险......您应该使用服务器端脚本(asp.net,php,...)执行此操作并输出标题到你的网页。某种缓存的东西,因为它可以无缝地在每个请求上获取标题。

答案 4 :(得分:0)

没有简单的干净方法来检索外部页面的标题。您可以使用WebClient在服务器端执行此操作并解析响应。

然而,值得回顾一下这个要求,是否真的有必要,它会产生多少额外的流量和延迟。还要考虑到你可能在外部网站上产生负载而不知道所有你想要的是标题,页面创建可能相当昂贵。

答案 5 :(得分:0)

string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString();

尝试。我不确定。

答案 6 :(得分:0)

我不确定是否所有服务器都支持此功能 看,如果这有帮助


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:我假设标题位于页面的开头。