相对地址转化为绝对地址
在博问中有朋友问起:如何将获取的html代码中的相对地址转化为绝对地址?
http://space.cnblogs.com/question/9655/
稍做小结,以方便更多的朋友查询。
基本思路:
1、先用正则得到所有的页面源码中所有的url,
可以参考这个
(?<=href\s*=)(?:[ \s""']*)(?!#|mailto|location.|javascript|.*css|.*this\.)[^""']*(?:[ \s>""'])
得到的值可能如下:
"/company/list.aspx"
"http://www.sohu.com/index.html"
..
"http://www.sohu.com/index.html"
..
2、然后再拼接加上前缀,这个前缀就是你的页面的根目录,之前就已经知道的。
大概写了个简单例子:获取页面内容部分省略了·! 网上资源很多。
也可以看这里
public static void Main(string[] args)
{
string minHtml = string.Empty;
string url = @"http://www.agronet.com.cn/default.aspx";
string preurl = url.Remove(url.IndexOf('/', 8) + 1);//获取url的根目录地址
minHtml = GetRequestString(url, 6000, 1, System.Text.Encoding.UTF8);//获取指定页面的内容
Console.WriteLine(preurl);
GetUrlListBHtml(minHtml,preurl);
Console.ReadKey();
}
/// <summary>
/// 获取html内容中的相对url地址,并向相对地址添加前缀
/// </summary>
/// <param name="text">html内容</param>
/// <param name="pre">要添加的绝对地址前缀</param>
public static void GetUrlListBHtml(string text,string pre)
{
string pat = @"(?<=href\s*=)(?:[ \s""']*)(?!#|mailto|location.|javascript|.*css|.*this\.)[^""']*(?:[ \s>""'])";
// Compile the regular expression.
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
System.Text.RegularExpressions.Match m = r.Match(text);
int matchCount = 0;
while (m.Success)
{
string urlX=m.Value.Replace("\"","");//替换引号
if (urlX.IndexOf("/") == 0)//相对地址
{
matchCount++;
Console.WriteLine("第" + matchCount+"个相对地址:");
Console.WriteLine("原地址是"+urlX);
Console.WriteLine("新的绝对地址是" + pre+urlX);
Console.WriteLine("------------------------------------");
}
m = m.NextMatch();
}
}
{
string minHtml = string.Empty;
string url = @"http://www.agronet.com.cn/default.aspx";
string preurl = url.Remove(url.IndexOf('/', 8) + 1);//获取url的根目录地址
minHtml = GetRequestString(url, 6000, 1, System.Text.Encoding.UTF8);//获取指定页面的内容
Console.WriteLine(preurl);
GetUrlListBHtml(minHtml,preurl);
Console.ReadKey();
}
/// <summary>
/// 获取html内容中的相对url地址,并向相对地址添加前缀
/// </summary>
/// <param name="text">html内容</param>
/// <param name="pre">要添加的绝对地址前缀</param>
public static void GetUrlListBHtml(string text,string pre)
{
string pat = @"(?<=href\s*=)(?:[ \s""']*)(?!#|mailto|location.|javascript|.*css|.*this\.)[^""']*(?:[ \s>""'])";
// Compile the regular expression.
System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
// Match the regular expression pattern against a text string.
System.Text.RegularExpressions.Match m = r.Match(text);
int matchCount = 0;
while (m.Success)
{
string urlX=m.Value.Replace("\"","");//替换引号
if (urlX.IndexOf("/") == 0)//相对地址
{
matchCount++;
Console.WriteLine("第" + matchCount+"个相对地址:");
Console.WriteLine("原地址是"+urlX);
Console.WriteLine("新的绝对地址是" + pre+urlX);
Console.WriteLine("------------------------------------");
}
m = m.NextMatch();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)