提取网页中的链接并生成xml

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;
    }
}
时间: 2024-09-14 18:36:59

提取网页中的链接并生成xml的相关文章

如何提取网页中所有链接

见过"网际快车"的"使用网际快车下载全部链接"这个功能吗?想实现它,我们可以这样做: IE有几个有用的接口,我们可以用它来提取网页所有链接. 一.基本原理 首先是用IHTMLDocument2的get_links,来获取IHTMLElementCollection接口,再通过IHTMLElementCollection来获取IHTMLAnchorElement,而IHTMLAnchorElement接口的get_href就是我们想要的,通过循环获取,我们就可以得到网

URL 筛选小工具 提取网页中的链接地址_vbs

使用方法:将下面的代码保存为jb51.vbs然后拖动你保存在本地的htm页面,拖放在这个vbs即可 复制代码 代码如下: '备注:URL筛选小工具 '防止出现错误 On Error Resume Next 'vbs代码开始---------------------------------------------- Dim p,s,re If Wscript.Arguments.Count=0 Then Msgbox "请把网页拖到本程序的图标上!",,"提示" Ws

正则表达式,提取网页中的链接地址

<td class=cate width="45%" style="word-break:break-all">       <a class=M href="http://jmfengcai.cn.alibaba.com/athena/companydetail/jmfengcai.html" onMouseDown="return aliclick(this,'?alishop=companylistcompany

正则表达式,提取网页中的链接地址_正则表达式

<td class=cate width="45%" style="word-break:break-all">       <a class=M href="http://jmfengcai.cn.alibaba.com/athena/companydetail/jmfengcai.html" onMouseDown="return aliclick(this,'?alishop=companylistcompany

ASP.NET实现抓取网页中的链接

asp.net|链接|网页 输入一个地址,就可以把那个网页中的链接提取出来,下面这段代码可以轻松实现,主要的是用到了正则表达式.      GetUrl.ASPx代码如下:      <%@ Page Language="<a href="http://dev.21tx.com/language/vb/" target="_blank">VB</a>" CodeBehind="GetUrl.aspx.vb&

如何提取网页中想要的信息并保存到text文件中

问题描述 如题,如何提取网页中想要的信息并保存到text文件中! 解决方案 解决方案二:该回复于2011-04-11 10:56:55被版主删除解决方案三:把网页中想要显示的内容转发(或者提交)给一个servlet控制器在控制器里面通过IO然后写到text中去解决方案四:提取的话,用正则过滤.解决方案五:引用2楼javaxiaochouyu的回复: 把网页中想要显示的内容转发(或者提交)给一个servlet控制器在控制器里面通过IO然后写到text中去 提取网页中想要的内容,这个怎么弄呢··初研

C#正则表达式通过HTML提取网页中的图片src

原文:C#正则表达式通过HTML提取网页中的图片src 目前在做HoverTreeCMS项目中有处理图片的部分,参考了一下网上案例,自己写了一个获取内容中的图片地址的方法. 可以先看看效果:http://tool.hovertree.com/a/zz/img/  一般来说一个 HTML 文档有很多标签,比如"<html>"."<body>"."<table>"等,想把文档中的 img 标签提取出来并不是一件容易

android-Android 客户端中的webview怎么实现把网页中所有链接都在客户端中打开显示

问题描述 Android 客户端中的webview怎么实现把网页中所有链接都在客户端中打开显示 如题 点击按钮打开一个webview 在这个网页中有其他的页面的超链接 怎么实现点击其他页面的超链接 都在本webview中显示. 解决方案 只要实现以下接口就可以让webView内的超链接在本应用内处理. webview.setWebViewClient( new WebViewClient() { public boolean shouldOverrideUrlLoading( WebView v

怎么提取网页中的视频、音乐歌曲、flash、图片等多媒体文件

打开网页后,发现里面有好看的视频.好听的音乐.好看的图片.很炫的flash,是不是想把它们弄到自己电脑上或手机.mp4上?但很多时候视 频无法下载,音乐只能试听,或者好听的背景音乐根本就不知道什么名字,更别说怎么下了:至于图片直接右键另存为即可,不过如果网页突然关掉了,但又想把看 过的图片弄下来,而忘了图片网页地址或者不想再通过历史记录打开,这时又该怎么办? 其实这些问题都能很好的解决,并且很简单,只要用一个软件来替你从电脑的缓存中搜索一下就OK了,因为网页中显示的内容基本上全部都在缓存中,如果