日期:2014-05-18  浏览次数:20481 次

关于网页抓取问题!截取字段!
抓取了一个网页,现在要截取字段
" <--开始--> 内容 <--结束--> "
  public   string   HttpString_Filtrate(string   Http_String,   string   Begin_String,   string   End_String)
        {
                int   Begin_Int   =   Http_String.IndexOf(Begin_String);
                int   End_Int   =   Http_String.IndexOf(End_String);
                string   ReString   =   Http_String.Substring(End_Int,Begin_Int);

                return   ReString;
        }

现在要得到内容,我写这个好象不行。。。。。 <--开始--> 和 <--结束--> 为不固定值

------解决方案--------------------
正则匹配 特殊符号。。
------解决方案--------------------
既然你抓的是网页
那你想取哪部分HTML标识的内容 总知道吧?
------解决方案--------------------
substring(Begin_Int,End_Int-Begin_Int)
------解决方案--------------------
找到开始位置
------解决方案--------------------
substring(Begin_Int,End_Int-Begin_Int)
然后用正则表达式代替Begin_String和End_String
------解决方案--------------------
用SubString个人觉得效率极低,用正则好!
------解决方案--------------------


//删除所有的html标记

public static string delHtml(string str)

{

if (str != null && str.Trim() != " ")

return Regex.Replace(str, " <[^> ]+> ", " ");

return str;

}

// 删除字符串中的特定标记

//isContent:是否清除内容

public static string delTag(string str, string tag, bool isContent)

{

if (tag == null || tag == " ")

{

return str;

}

if (isContent) //要求清除内容

{

return Regex.Replace(str, string.Format( " <({0})[^> ]*> ([\\s\\S]*?)
<\\/\\1> ", tag), " ", RegexOptions.IgnoreCase);

}

return Regex.Replace(str, string.Format(@ "( <{0}[^> ]*(> )?)|( </{0}[^> ]
*> )| ", tag), " ", RegexOptions.IgnoreCase);

}

// 删除字符串中的一组标记

//isContent:是否清除内容

public static string delTagArray(string str, string tagA, bool isContent)

{

string[] tagAa = tagA.Split( ', ');

foreach (string sr1 in tagAa) //遍历所有标记,删除

{

str = delTag(str, sr1, isContent);

}

return str;

}