博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提取网页中的链接并生成xml
阅读量:7113 次
发布时间:2019-06-28

本文共 3255 字,大约阅读时间需要 10 分钟。

hot3.png

using System;using System.Xml;using System.Text;using System.Net;using System.IO;using System.Collections;using System.Text.RegularExpressions;public class App{    public static void Main()    {        string strCode;        ArrayList alLinks;         Console.Write("请输入一个网页地址:");        string strURL = Console.ReadLine();        if (strURL.Substring(0, 7) != @"http://")        {            strURL = @"http://" + strURL;        }         Console.WriteLine("正在获取页面代码,请稍侯...");        strCode = GetPageSource(strURL);        Console.WriteLine("正在提取超链接,请稍侯...");        alLinks = GetHyperLinks(strCode);        Console.WriteLine("正在写入文件,请稍侯...");        WriteToXml(strURL, alLinks);    }    // 获取指定网页的HTML代码     static string GetPageSource(string URL)    {        Uri uri = new Uri(URL);         HttpWebRequest hwReq = (HttpWebRequest)WebRequest.Create(uri);        HttpWebResponse hwRes = (HttpWebResponse)hwReq.GetResponse();         hwReq.Method = "Get";         hwReq.KeepAlive = false;         StreamReader reader = new StreamReader(hwRes.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));         return reader.ReadToEnd();    }    // 提取HTML代码中的网址     static ArrayList GetHyperLinks(string htmlCode)    {        ArrayList al = new ArrayList();         string strRegex = @"http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";         Regex r = new Regex(strRegex, RegexOptions.IgnoreCase);        MatchCollection m = r.Matches(htmlCode);         for (int i = 0; i <= m.Count - 1; i++)        {            bool rep = false;            string strNew = m[i].ToString();            // 过滤重复的URL             foreach (string str in al)            {                if (strNew == str)                {                    rep = true;                    break;                }            }             if (!rep) al.Add(strNew);        }         al.Sort();         return al;    }    // 把网址写入xml文件     static void WriteToXml(string strURL, ArrayList alHyperLinks)    {        XmlTextWriter writer = new XmlTextWriter("HyperLinks.xml", Encoding.UTF8);         writer.Formatting = Formatting.Indented;        writer.WriteStartDocument(false);        writer.WriteDocType("HyperLinks", null, "urls.dtd", null);        writer.WriteComment("提取自" + strURL + "的超链接");        writer.WriteStartElement("HyperLinks");        writer.WriteStartElement("HyperLinks", null);        writer.WriteAttributeString("DateTime", DateTime.Now.ToString());         foreach (string str in alHyperLinks)        {            string title = GetDomain(str);            string body = str;            writer.WriteElementString(title, null, body);        }         writer.WriteEndElement();        writer.WriteEndElement();         writer.Flush();        writer.Close();    }    // 获取网址的域名后缀     static string GetDomain(string strURL)    {        string retVal;         string strRegex = @"(\.com/|\.net/|\.cn/|\.org/|\.gov/)";         Regex r = new Regex(strRegex, RegexOptions.IgnoreCase);        Match m = r.Match(strURL);        retVal = m.ToString();         strRegex = @"\.|/{1}quot;;        retVal = Regex.Replace(retVal, strRegex, "").ToString();         if (retVal == "")            retVal = "other";         return retVal;    }}

转载于:https://my.oschina.net/zhangqs008/blog/712717

你可能感兴趣的文章
企业实际应用之同步远程yum源到本地
查看>>
建议考前多熟记的知识点(1)(2)《网络工程师软考辅导——3年真题精解与闯关密卷》...
查看>>
酷客多小程序百城宣讲会-济南站圆满成功
查看>>
“风口论”,还是少鼓吹的好
查看>>
声控公司Nuance
查看>>
Photoshop制作一只可爱的卡通小鸟
查看>>
物化视图测试手册
查看>>
Windows7(32bit)用Firefly创建第一个示例
查看>>
《软件性能测试与LoadRunner实战教程》新书上市
查看>>
Windows批处理中的等待技巧
查看>>
艾伟_转载:使用AOP动态调用WebService
查看>>
C#收发邮件(Jmail+Professional+v4.4+特别版)
查看>>
嵌入式计算机与PC机的区别
查看>>
FastReport微调
查看>>
nginx下的文件下载防盗链(HttpAccessKeyModule)
查看>>
Linq延迟执行(转)
查看>>
Django实战(3):Django也可以有scaffold
查看>>
简单缓存 datatable
查看>>
MFC界面的完善
查看>>
WPF&SL之Basic MVVM
查看>>