转载:http://www.wzsky.net/html/Program/net/26849.html
using System;
using System.Xml;
using System.Text;
using System.Net;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions; namespace test
{
class Program
{
static void Main(string[] args)
{
string strCode;
ArrayList alLinks; Console.Write("请输入一个网页地址:");
string strURL = Console.ReadLine();
if (strURL.Substring(, ) != @"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 = ; i <= m.Count - ; 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 = @"\.|/$";
retVal = Regex.Replace(retVal, strRegex, "").ToString(); if (retVal == "")
retVal = "other"; return retVal;
}
}
}

C#-提取网页中的超链接的更多相关文章

  1. python笔记之提取网页中的超链接

    python笔记之提取网页中的超链接 对于提取网页中的超链接,先把网页内容读取出来,然后用beautifulsoup来解析是比较方便的.但是我发现一个问题,如果直接提取a标签的href,就会包含jav ...

  2. 用html.parser抓网页中的超链接,返回list

    #python3 from html.parser import HTMLParser class MyHTMLParser(HTMLParser): """ 1.tag ...

  3. python学习笔记——爬虫中提取网页中的信息

    1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...

  4. [爬虫学习笔记]用于提取网页中所有链接的 Extractor 模块

            Extractor的工作是从下载的网页中将它包含的所有URL提取出来.这是个细致的工作,你需要考虑到所有可能的url的样式,比如网页中常常会包含相对路径的url,提取的时候需要将它转换 ...

  5. 网页中的超链接<a>标签

    格式: <a href="目标网址" title="鼠标滑过显示的文本">链接显示的文本</a> 注意:为文本加入<a>标签 ...

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

    目前在做HoverTreeCMS项目中有处理图片的部分,参考了一下网上案例,自己写了一个获取内容中的图片地址的方法. 可以先看看效果:http://tool.hovertree.com/a/zz/im ...

  7. 【搜索引擎Jediael开发笔记3】使用HtmlParser提取网页中的链接

    关于HtmpParser的基本内容请见 HtmlParser基础教程 本文示例用于提取HTML文件中的链接 package org.ljh.search.html; import java.util. ...

  8. 【google chrome 一键打开 谷歌跳转的页面+JS Replace】谷歌无法打开网页的时候,提取网页中url的部分

    经常在谷歌搜索,遇到网页无法打开,然后就停留在比如:http://www.google.com.hk/search?newwindow=1&safe=strict&site=& ...

  9. Python:提取网页中的电子邮箱

    import requests, re #regex = r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"#这个正则表达式过滤 ...

随机推荐

  1. 了解magento数据库

    网址是:http://www.magereverse.com/,不同版本都有

  2. NSNumber 、 NSValue 、 日期处理 、 集合类 、 NSArray(一)

    1 基本数据类型的封装 1.1 问题 我们所学的所有基本数据类型,如int.float.double.char等,都不是对象,不能向它们发送消息.然而,在Foundation中的许多类,如NSArra ...

  3. mybatis和model关联

    <select id="getSubCreditLogBySubCreditId" parameterType="long" resultType=&qu ...

  4. vs2013常用快捷键收集

    vs2013快捷键: 复制一整行代码: Ctrl+C剪切一整行代码: Ctrl+X删除一整行代码: Ctrl+L跳转到指定的行:ctrl+G 注释:组合键“Ctrl+K+C”取消注释:组合键“Ctrl ...

  5. 怎样知道linux是否安装了mysql

    1. 使用 [root@localhost Desktop]# rpm -qa |grep mysql (-qa查询已经安装的软件) mysql-libs-5.1.71-1.el6.x86_64 结果 ...

  6. Windows server上rsync的安装和使用

    获取和安装 首先从rsync官网下载软件的安装版本,注意这里要下的是客户端版本,而非服务端版本. 下载完成之后,双击"cwRsync_4.0.5_Installer.exe"图标, ...

  7. 在centos使用rpm包的方式安装mysql,以及更改root密码

    在centos使用rpm包的方式安装mysql,对于centos官方实际推荐使用yum进行安装,下载安装的方式主要用于内网服务器不能连接外网yum源的情况. 下载包 首先根据centos版本在mysq ...

  8. UIImage加载图片的两种方法区别

    Apple官方的文档为生成一个UIImage对象提供了两种方法加载图片: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数也是图片文件的路 ...

  9. Linux的服务器初始优化脚本。

    #!/bin/bash #优化服务器启动的脚本.禁用无关账号.无关服务 #Lock User Account passwd -l xfs passwd -l news passwd -l nscd p ...

  10. Linux下Find命令的使用

    Find命令的一般形式为: findpathname-options[-print-exec-ok] pathname:find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录. - ...