VSTO相对于VBA等有着得天独厚,无法比拟的优势,当然在网抓具体体现在多线程,编码,以及验证码图片等等的处理,当然具体有什么好处,度娘比我更有说服力,我就不多费话了。
C#用于网抓的类和方法很多,我就挑和VBA相近类using System.Net下的HttpWebRequest来和大家探讨一下。 首先引用using System.Net是针对HttpWebRequest<<必需的,再次对于文本的流(上传或处理流)using System.IO<<必需,再者如果是想开启多线程,那么using System.Threading也就是必需的了,还有一个处理验证码图片的时候需要using System.Drawing,当然还有其他的一些类,暂时就不说了,至少上面这几个类也不太可能说得太透彻,主要就是针对网抓来进行。
第一,进行一个最简单的网抓,GET类 - string url = "填入GET的网页";
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- request.Method = "GET";
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
复制代码这样的话就得到了服务器返回的数据流,然后再对这个流进行简单处理 - public static string GetResponseText(HttpWebResponse response)
- {
- string Text = "";
- using (Stream stream = response.GetResponseStream())
- {
- StreamReader sr = new StreamReader(stream, Encoding.Default);
- Text = sr.ReadToEnd();
- }
- return Text;
- }
复制代码上面一个自定义函数就是针对处理response流 所以最上面那一段代码只需再加进一句引用这个处理流的函数即可 - string responseText = GetResponseText(response);
复制代码这样就得到了我们所需要的文本 第二,最简单的POST POST的中文意思是提交,所以POST就是客户端与服务器交互,客户端告诉服务器,我提交一些数据,告诉需要做什么,这样等待服务器做出相应的回应。 一般POST和GET在代码上没有什么区别,只不过在POST的时候比GET多了一个提交数据,就是VBA里常用的.send,话不多说,先上一段代码 - string url = "填入GET的网页";
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- request.Method = "POST";
复制代码好了,至此就完成了一个简单的POST示例,有了上面这个模板,基本上能完成所以网抓。其他的无非就是在上面进行修修补补,比如模拟其他头文件,针对于HTTPS的证书等,还值得一提的就是Cookie了,因为这个request不再受cookie的困扰,不像VBA里会自动保持cookie,就是说对于同一个request,你每次都需要去设置这个cookie,方法也简单,后面再细说。 我想大家光看完上面这些,估计就在想,啊,C#的写的代码还没VBA的简单,实乎不然,其实比VBA里的代码要简单,为什么这么说呢,首先一点,就是编码问题,再也不用去找转UTF-8,GB2312,还有其实一些网页编码等,还有一个就是上传文件等的流,不用再去想,唉这种文件的怎么send出去呀,代码是什么呀。。不用再去乱翻一堆资料了。 |