使用C#与正则表达式分析hao123.com的网址列表
最近需要一些对网址的分类,来检测本地用户上网的习惯,这样我们就需要一些域名的分类,首先我们就想到了www.hao123.com
通过这个分析,大家可以了解到C#获取网页源代码、调用正则表达式的一些简单方法
以及一些使用中的技巧。
1、获取网页源代码
为了方便,我们在这里直接写成函数的形式,如下:
通过这个列表就基本可以分析出我们想要的分类网址了
因为点击前面的绿色字可以进入详细列表,我们对这个绿色字的源代码进行分析,发现是:
<spanclass="box-sort_title"><ahref="http://v.hao123.com/movie/">影 视</a></span>
而且是有且仅有这样子的才是分类列表的入口,所以我们就可以用这段字符串作为我们的模板进行分析:
4、正则表达式分析:
我们需要的是a href="后面的链接和链接后面的标题,在此,我们把他们改成(.*?),即
<spanclass="box-sort_title"><ahref="(.*?)">(.*?)</a></span>
.*表示任意字符串 ?表示非贪心处理 两边的括号表示我们需要在下面用到它。
通过这样的处理,在正则表达式分析后我们就可以得到网址和对应的分类:
//**************直接分析网页,不保存************* foreach (Page P in ClassPages) { string temp = GetSource(P.Url); strReg = "<h3><div><a href=\"(.*?)\" target=\"_blank\" class=\"text-con\">(.*?)</a></div></h3>"; Console.WriteLine(P.Class); StreamWriter sw2 = new StreamWriter("c:\\输出列表.txt", true, Encoding.Default);//这里改成false就不会追加,直接覆盖。 sw2.WriteLine("<" + P.Class + ">"); foreach (Match m in Regex.Matches(temp, strReg, RegexOptions.IgnoreCase)) { sw2.WriteLine(m.Groups[1].Value + " " + m.Groups[2].Value); } sw2.Close(); } //**************直接分析网页,不保存*************最后网址的分类就保存在了c盘下的txt文件中。
这里要注意的是,因为我使用了追加的模式,所以在第二次运行程序的时候会继续向文件中添加,有兴趣的可以让程序自动删除原来的文件。
上个代码:http://download.csdn.net/detail/icyfox_bupt/4389810
做爬虫做的比较多了,发现其实爬东西会用方法是一回事,会一些技巧也很重要,比如有的时候在分析的时候添加一些预处理会在正则的时候方便很多,这就需要大家慢慢去摸索了。