相对地址转化为绝对地址
在博问中有朋友问起:如何将获取的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();
}
}