2010-01-18 87 views
0

private void button3_Click(object sender,EventArgs e) { listBox1.Items.Clear();关于网页解析

 string szURL = textBox1.Text;// "http://localhost"; 
     //textBox1.Text = szURL; 
     HttpWebRequest httpRequest; 
     HttpWebResponse httpResponse; 
     string bodyText = ""; 
     Stream responseStream; 
     Byte[] RecvBytes = new Byte[Byte.MaxValue]; 
     Int32 bytes; 
     httpRequest = (HttpWebRequest)WebRequest.Create(szURL); 
     httpResponse = (HttpWebResponse)httpRequest.GetResponse(); 
     responseStream = httpResponse.GetResponseStream(); 
     while (true) 
     { 
      bytes = responseStream.Read(RecvBytes, 
      0, RecvBytes.Length); 
      if (bytes <= 0) break; 
      bodyText += System.Text.Encoding.UTF8.GetString(RecvBytes, 
      0, bytes); 
     } 
     //listBox1.Items.Add(bodyText); 
     textBox2.Text = bodyText; 

     MatchCollection m1 = Regex.Matches(bodyText, @"(<a.*?>.*?</a>)", 
       RegexOptions.Singleline); 

     // 2. 
     // Loop over each match. 
     foreach (Match m in m1) 
     { 
      string value = m.Groups[1].Value; 
      // LinkItem i = new LinkItem(); 

      // 3. 
      // Get href attribute. 
      Match m2 = Regex.Match(value, @"<\s*script[^>]*>(?<content>.*?)<\s*/\s*\script\s*>", 
       RegexOptions.Singleline); 
      if (m2.Success) 
      { 
       listBox1.Text = m2.Groups[1].Value; 
      } 

      // 4. 
      // Remove inner tags from text. 

      string t = Regex.Replace(value, @"\s*<.*?>\s*", "", 
       RegexOptions.Singleline); 
      // i.Text = t; 
      listBox1.Items.Clear(); 
      listBox1.Items.Add(t); 

     } 




    } 

这是我的代码,它被赋予作为分配给我..我必须在标签之间的内容区分开来......独自从网页中的链接...我觉得很困难。请尽快帮助我..

回答

1

解析HTML很困难,您应该尝试使用第三方框架来构建HTML DOM(最好使用某种形式的标记器)而不是使用正则表达式。当你使用.NET时,我强烈建议你看看使用HTMLAgility Pack

它(HTML敏捷性包)是一个.NET代码库,使您解析“从网络中” HTML文件。解析器对“真实世界”格式错误的HTML非常宽容。对象模型与提出System.Xml非常相似,但是对于HTML文档(或流)。

+0

谢谢你的想法 – user247958 2010-01-19 08:42:48