C# 抓取网站数据

项目主管说这是项目中的一个亮点(无语...), 类似于爬虫一类的东西,模拟登陆后台系统,获取需要的数据。然后就开始研究这个。

之前有一些数据抓取的经验,抓取流程无非:设置参数->服务端发送请求->解析结果

1、验证码识别

系统的验证码只包含数字,不复杂,所以没有深入研究。

http://www.cnblogs.com/ivanyb/archive/2011/11/25/2262964.html

这个完全满足我的需求。

2、用户名、密码是用户提供的。

这里面有一个证书,每次请求都要带上。

证书获取方法:http://www.sufeinet.com/thread-4270-1-1.html

3、模拟登陆请求网上很多。

推荐位大神,写的相当不错:http://www.sufeinet.com/thread-2382-1-1.html

4、解析html内容

推荐一个类库:HtmlAgilityPack,灰常好用。它将html字符串转换成类型xml的操作(本来我还想用正则)。

有以上这些东西,基本上就可以调试工作了,要想做成一个后台服务,还需要一个定时任务的东西,这个还在研究。。。

心得:

1、在登陆的时候,一直提示验证码错误,百思不得其解,因为验证码是我手动输入的,用抓包工具分析后,发现JSESSIONID(JSP网站服务端用到的),这个每次请求都需要带上,以及JSESSIONID是否正确。

2、在抓取数据的时候,提示登陆超时,郁闷许久,抽根烟,把问题有指向了相关参数上,抓包分析后,问题就出现在JSESSIONID上,JSESSIONID取值不对,修改后,一切正常。

开源网络爬虫很多,上Sourceforge一搜就会有很多,但很少有C#的。今天推荐两个c#开发的网络爬虫

http://www.codeproject.com/KB/IP/Crawler.aspx 老外写的,http通讯采用了socket,效果不错,不过没有处理中文,中文下载会出现乱码,在socket接受部分做一下处理就可以了。这个程序比较 完整,一个基本爬虫所具备的功能都有了,是一个不错的例子。VS2003,.net 1.1 其中有些写法已经过时,需要调整。
http://www.jeffheaton.com/source 还是一个老外写的,csspider.zip。没有仔细研究,遵循LGPL协议,这个同志是专门做爬虫研究的,写过不少书,只不过是英文,看不懂。.net 2.0的。
这里介绍的两个例子都是比较完整的例子,网页下载、分析、多线程、输出都有了。稍微进行以下加工便可得到很好的效果,同时,也可多研究一下实现思路,对自己做爬虫有很大的帮助。

原文地址:https://www.cnblogs.com/beijing2020/p/5726287.html