呵呵,抓取网页扒链接和图片的时候,总有些路径是写的相对路径,比如../之类的,我写了一个函数解决点问题,但不能全部解决,哪位大侠有兴趣有指点一下么
代码
#region
A标签相对路径改绝对路径
private static void AHrefFilter( ref string content, string Url, ref string MatchPattern)
{
// A标签相对路径改绝对路径
MatchPattern = @" \bhref=[^:^;^#^+^>]*?> " ;
MatchCollection mcAhref = Regex.Matches(content, MatchPattern, RegexOptions.IgnoreCase);
foreach (Match m in mcAhref)
{
string hrefStr = m.Value.Replace( " href " , "" ).Replace( " HREF " , "" ).Substring( 1 );
string hrefStrTrim = hrefStr;
if ( ! hrefStr.Contains( " http " ) && hrefStr.StartsWith( " \ " / " ))
{
string urlagain = Regex.Match(Url, " http://([^/]*?/) " ).Value.Trim();
hrefStr = " \ "" + urlagain.Substring(0, urlagain.Length - 1) + hrefStr.Substring(1);
}
if ( ! hrefStr.Contains( " http " ) && hrefStr.Contains( " \ " .. / .. / " ))
{
hrefStr = hrefStr.Replace( " http://www.cnblogs.com/ " , "" );
hrefStr = " \ "" + Regex.Match(Url, " http: // ([^/]*?/){2}").Value.Trim() + hrefStr.Substring(1);
}
if ( ! hrefStr.Contains( " http " ) && hrefStr.Contains( " \ " .. / " ))
{
hrefStr = hrefStr.Replace( " ../ " , "" );
hrefStr = " \ "" + Regex.Match(Url, " http: // ([^/]*?/){3}").Value.Trim() + hrefStr.Substring(1);
}
if ( ! hrefStr.Contains( " http " ) && ! hrefStr.StartsWith( " \ " / " ))
{
hrefStr = " \ "" + Regex.Match(Url, " http: // ([^/]*?/){4}").Value.Trim() + hrefStr.Substring(1);
}
string newHrefStr = " href= " + hrefStr + "" ;
content = content.Replace(m.Value, newHrefStr);
}
}
#endregion
private static void AHrefFilter( ref string content, string Url, ref string MatchPattern)
{
// A标签相对路径改绝对路径
MatchPattern = @" \bhref=[^:^;^#^+^>]*?> " ;
MatchCollection mcAhref = Regex.Matches(content, MatchPattern, RegexOptions.IgnoreCase);
foreach (Match m in mcAhref)
{
string hrefStr = m.Value.Replace( " href " , "" ).Replace( " HREF " , "" ).Substring( 1 );
string hrefStrTrim = hrefStr;
if ( ! hrefStr.Contains( " http " ) && hrefStr.StartsWith( " \ " / " ))
{
string urlagain = Regex.Match(Url, " http://([^/]*?/) " ).Value.Trim();
hrefStr = " \ "" + urlagain.Substring(0, urlagain.Length - 1) + hrefStr.Substring(1);
}
if ( ! hrefStr.Contains( " http " ) && hrefStr.Contains( " \ " .. / .. / " ))
{
hrefStr = hrefStr.Replace( " http://www.cnblogs.com/ " , "" );
hrefStr = " \ "" + Regex.Match(Url, " http: // ([^/]*?/){2}").Value.Trim() + hrefStr.Substring(1);
}
if ( ! hrefStr.Contains( " http " ) && hrefStr.Contains( " \ " .. / " ))
{
hrefStr = hrefStr.Replace( " ../ " , "" );
hrefStr = " \ "" + Regex.Match(Url, " http: // ([^/]*?/){3}").Value.Trim() + hrefStr.Substring(1);
}
if ( ! hrefStr.Contains( " http " ) && ! hrefStr.StartsWith( " \ " / " ))
{
hrefStr = " \ "" + Regex.Match(Url, " http: // ([^/]*?/){4}").Value.Trim() + hrefStr.Substring(1);
}
string newHrefStr = " href= " + hrefStr + "" ;
content = content.Replace(m.Value, newHrefStr);
}
}
#endregion