明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

C#:如何得到一个网页的所有a标记 herf 链接代码

Posted on 2010-10-12 16:25  且行且思  阅读(2442)  评论(1编辑  收藏  举报


using  System.IO;
using  System.Text;
using  System.Text.RegularExpressions;
using  System.Net;

1.先取得网页的原代码

 Uri url=new Uri("http://www.blogjava.net/wujun");
            HttpWebRequest request
=(HttpWebRequest) WebRequest.Create(url);
            HttpWebResponse response 
= (HttpWebResponse)request.GetResponse();
            Stream stream 
= response.GetResponseStream();
            StreamReader sr 
= new StreamReader(stream);
            
string str=sr.ReadToEnd();
            sr.Close();
            stream.Close();
            response.Close();

得到网页的html源代码以后。再根据源代码分析 所有 <a href ="url">   最后得到 href后面  url的链接地址

正则表达式
    Regex RegExFindHref = new Regex(@"<a\s+([^>]*\s*)?href\s*=\s*(?:""(?<1>[/\a-z0-9_][^""]*)""|'(?<1>[/\a-z0-9_][^']*)'
|(?<1>[/\a-z0-9_]\S*))(\s[^>]*)?>(?<2>.*?)</a>
", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled);



循环读出 连接地址

     for (Match m = RegExFindHref.Match(str); m.Success; m = m.NextMatch())
            {
               TextBox1.Text
+= m.Groups[1].ToString()+"\n";
            

            }


运行后
TextBox1 将显示分析后的所有网页的连接 :

http://www.dotlucene.net/
http://www.castleproject.org/
http://www.codeplex.com/
http://www.codeproject.com/
http://www.asp.net/
http://www.nhibernate.org/
http://www.blogjava.net/wujun/CommentsRSS.aspx
http://www.blogjava.net/wujun/archive/2006/10/23/47150.html#76745
http://www.blogjava.net/wujun/archive/2006/10/23.html
http://www.blogjava.net/wujun/archive/2006/10/23/76769.html
http://www.blogjava.net/wujun/archive/2006/10/23/76769.html
http://www.blogjava.net/wujun/archive/2006/10/23/76769.html#FeedBack
http://www.blogjava.net/wujun/admin/EditPosts.aspx?postid=76769
http://www.blogjava.net/wujun/AddToFavorite.aspx?id=76769
http://www.blogjava.net/wujun/archive/2006/10/20.html
 ......
..............
 .........................等等等。。。

代码
 /// <summary>
        
/// C# :从一段字符串中,输入开始和结束的字符,取中间的字符
        
/// </summary>
        
/// <param name="str">一段字符串</param>
        
/// <param name="strStart">开始字符</param>
        
/// <param name="strEnd">结束字符</param>
        
/// <returns></returns>
        public static string AnalyzeMessage(string str, string strStart, string strEnd)
        {
            
string Result = "";
            
int i = str.IndexOf(strStart);
            
if (i >= 0)
            {
                
int j = str.IndexOf(strEnd, i + strStart.Length);
                
if (j > 0)
                {
                    Result 
= str.Substring(i + strStart.Length, j - i - strStart.Length);
                }
            }
            
return Result;
        }