2011-05-19 113 views
1

我想从远程HTML页面加载一个标签的值。我已经通过加载整个页面并使用正则表达式来完成此操作。我找到了期望的结果,但是这种方法非常慢,我希望它快速加载标签值而不是整个网页。有什么建议么?需要帮助从C#中的HTML页面提取标签#

这是我在做什么的那一刻:

using (var client = new WebClient()) 
{ 
    string result = c   client.DownloadString("http://web.archive.org/http://profiles.yahoo.com/italy_"); 
    var regex = new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", 
          RegexOptions.Compiled); 
    var s = result; 
    foreach (Match email in regex.Matches(s)) 
    { 
     // Console.WriteLine(email.Value); 
     label2.Text = email.Value; 
    } 
} 
+1

正如Nathan所说,确实必须加载整个页面,除非您可以创建一个新的服务器端页面,通过自定义页面仅返回所需的信息。 – Maverik 2011-05-19 08:29:00

+0

如果你正在为多个页面执行此操作,那么编译一次正则表达式并重用它,而不是处理每个页面似乎是一个明显的优化... – forsvarir 2011-05-19 08:30:39

回答

2

您必须加载整个页面 - 这是HTTP请求的方式一般工作。

也许你的正则表达式可以改进?不是我的专业领域,对不起。

2

我找到了想要的结果,但这种方法 很慢我希望它 快速加载只看重标签不 整个网页。

夫妇的想法:

  • Archive.org通常是在我的经验很慢。我的猜测是这是你的瓶颈。

  • 不,没有办法只向第三方页面发出部分请求,除非它们具有能够返回更多特定数据的响应机制(例如,返回小片段的启用JSON的Web服务的页面上使用的HTML)。

  • 通常情况下,通过将数据加载到某种HTML解析器而不是使用正则表达式进行解析时运气会更好。