网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > ASP.Net精品代码 > 正文

C#抓取网页里面的所有链接!

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

这几天偶尔看见了,C#抓取网页的链接。的代码。感觉当时做的很简单。呵呵。也没多考虑什么过程。先把简单的给大家拿出来看看。如果大家有什么意见或者有好的方法可以共同交流。谢谢!一下仅供参考:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.ComponentModel; 
  4. using System.Data; 
  5. using System.Drawing; 
  6. using System.Linq; 
  7. using System.Text; 
  8. using System.Windows.Forms; 
  9.  
  10. using System.Xml; 
  11. using System.Net; 
  12. using System.IO; 
  13. using System.Collections; 
  14. using System.Text.RegularExpressions; 
  15.  
  16. namespace text 
  17.     public partial class Form1 : Form 
  18.     { 
  19.         string strCode; 
  20.         ArrayList alLinks; 
  21.         public Form1() 
  22.         { 
  23.             InitializeComponent(); 
  24.         } 
  25.  
  26.         private void button1_Click(object sender, EventArgs e) 
  27.         { 
  28.             if (textBox1.Text == ""
  29.             { 
  30.                 MessageBox.Show("请输入网址"); 
  31.                 return
  32.             } 
  33.             string strURL = textBox1.Text.ToString().Trim(); 
  34.             if (strURL.Substring(0, 7) != @"http://"
  35.             { 
  36.                 strURL = @"http://" + strURL; 
  37.             } 
  38.             MessageBox.Show("正在获取页面代码,请稍后..."); 
  39.             strCode = GetPageSource(strURL); 
  40.             MessageBox.Show("正在提取超链接,请稍侯..."); 
  41.             alLinks = GetHyperLinks(strCode); 
  42.             MessageBox.Show("正在写入文件,请稍侯..."); 
  43.             WriteToXml(strURL, alLinks); 
  44.         } 
  45.         // 获取指定网页的HTML代码  
  46.         public static string GetPageSource(string URL) 
  47.         { 
  48.             Uri uri = new Uri(URL); 
  49.             HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(uri); 
  50.             HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse(); 
  51.             hwReq.Method = "Get"
  52.             hwReq.KeepAlive = false
  53.             StreamReader reader = new StreamReader(hwRes.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312")); 
  54.             return reader.ReadToEnd(); 
  55.         } 
  56.         // 提取HTML代码中的网址  
  57.         public static ArrayList GetHyperLinks(string htmlCode) 
  58.         { 
  59.             ArrayList al = new ArrayList(); 
  60.             string strRegex = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"
  61.             Regex r = new Regex(strRegex, RegexOptions.IgnoreCase); 
  62.             MatchCollection m = r.Matches(htmlCode); 
  63.             for (int i = 0; i <= m.Count - 1; i++) 
  64.             { 
  65.                 bool rep = false
  66.                 string strNew = m[i].ToString(); 
  67.                 // 过滤重复的URL  
  68.                 foreach (string str in al) 
  69.                 { 
  70.                     if (strNew == str) 
  71.                     { 
  72.                         rep = true
  73.                         break
  74.                     } 
  75.                 } 
  76.                 if (!rep) al.Add(strNew); 
  77.             } 
  78.             al.Sort(); 
  79.             return al; 
  80.         } 
  81.         // 把网址写入xml文件  
  82.         static void WriteToXml(string strURL, ArrayList alHyperLinks) 
  83.         { 
  84.             XmlTextWriter writer = new XmlTextWriter("HyperLinks.xml", Encoding.UTF8); 
  85.             writer.Formatting = Formatting.Indented; 
  86.             writer.WriteStartDocument(false); 
  87.             writer.WriteDocType("HyperLinks"null"urls.dtd"null); 
  88.             writer.WriteComment("提取自" + strURL + "的超链接"); 
  89.             writer.WriteStartElement("HyperLinks"); 
  90.             writer.WriteStartElement("HyperLinks"null); 
  91.             writer.WriteAttributeString("DateTime", DateTime.Now.ToString()); 
  92.  
  93.             foreach (string str in alHyperLinks) 
  94.             { 
  95.                 string title = GetDomain(str); 
  96.                 string body = str; 
  97.                 writer.WriteElementString(title, null, body); 
  98.             } 
  99.             writer.WriteEndElement(); 
  100.             writer.WriteEndElement(); 
  101.             writer.Flush(); 
  102.             writer.Close(); 
  103.         } 
  104.         // 获取网址的域名后缀  
  105.         static string GetDomain(string strURL) 
  106.         { 
  107.             string retVal; 
  108.             string strRegex = @"(\.com/|\.net/|\.cn/|\.org/|\.gov/)"
  109.             Regex r = new Regex(strRegex, RegexOptions.IgnoreCase); 
  110.             Match m = r.Match(strURL); 
  111.             retVal = m.ToString(); 
  112.             strRegex = @"\.|/contentquot;
  113.             retVal = Regex.Replace(retVal, strRegex, "").ToString(); 
  114.             if (retVal == ""
  115.                 retVal = "other"
  116.             return retVal; 
  117.         } 
  118.     } 

 

  • 下一篇资讯: C++强大的背后
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师