C#中抓取网页的方法
来源:互联网 发布:印度种姓制度 知乎 编辑:程序博客网 时间:2024/05/12 22:52
C#中抓取网页的方法
获取网页的HTML,大致有三种方法:1. 通过WebClient下载网页;2.通过HttpWebRequest和HttpWebResponse获得网页的HTML;3.通过微软提供的WebBrowser控件获得网页的DocumentTree。解析HTML,主要方法有两种:正则表达式和DocumentTree。以下分别给予简要介绍。
本文只给出大致的实现思路,代码也较为简洁,只对各个思路给出简单的解释说明。
预备知识:要获得网页的HTML,首先需要对HTTP协议中的Get和Post方法有简单的了解。Get方法是通过Uri向服务器提交请求,服务器根据Uri中指定的参数对客户端请求进行响应,返回请求的数据;而Post请求一般需要将提交的数据放到请求报文的body部分,还需要在报文首部Content-Length字段中指出body的长度,服务器收到Post请求后,在对这些请求数据进行处理后,再返回相应的响应数据。
方法1:
WebClientwClient = new WebClient();
byte[]pageData = wClient.DownloadData("
string html= Encoding.UTF8.GetString(pageData);
方法2:
HttpWebRequest request = HttpWebRequest.Create("as HttpWebRequest;
request.Method ="GET";
HttpWebResponse response = request.GetResponse() asHttpWebResponse;
Streamstream = response.GetResponseStream();
StreamReaderreader = new StreamReader(stream, Encoding.UTF8);
string html= reader.ReadToEnd();
reader.Close();
关于此方法更详细的介绍,请参见
方法3:
WebBrowser.Navigate("http://hjzlws.spaces.live.com/",.....);
然后在WebBrowser的NavigateComplete事件中,得到DocumentTree,就可以对网页的HTML进行处理了。关于此方法更详细的介绍,可以参见这篇文章。
对于Post方法,只需要在调用获得响应的方法前写入需要post的数据即可:
1: string url = "http://www.ups.com/WebTracking/track";
2: string postData = "loc=zh_cn&HTMLVersion=5.0&saveNumbers=null&trackNums
3: =1ZX580116610381498&AgreeToTermsAndConditions=yes&track.x=17&track.y=4";
4: string html = "";
5: Encoding encode = Encoding.GetEncoding("GB2312");
6: byte[] data = encode.GetBytes(postData);
7: HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
8: req.AllowAutoRedirect = true;
9: req.Method = "POST";
10: req.ContentType = "application/x-www-form-urlencoded";
11: req.ContentLength = data.Length; // 要Post的数据的长度
12:
13: // 把要Post的Data写入(追加)到outStream对象中,使其具有post data
14: Stream outStream = req.GetRequestStream();
15: outStream.Write(data, 0, data.Length);
16: outStream.Close();
17:
18: // Send Request and get the response
19: HttpWebResponse response = req.GetResponse() as HttpWebResponse;
20:
21: // 得到response的流
22: Stream responseStream = response.GetResponseStream();
23: StreamReader sr = new StreamReader(responseStream, encode);
24:
25: html = sr.ReadToEnd();
26: sr.Close();
此外,如果需要在多个请求间维持同一个Session,只需要为各个请求的HttpWebRequest指定同一个CookieContainer即可。
http://it.chinawin.net/softwaredev/article-1e45.html
- C#中抓取网页的方法
- C# 从网页抓取数据的一般方法
- 网页内容抓取 图片的抓取方法
- linux抓取网页的方法
- c#抓取和分析网页的类
- C#抓取网页上的所有连接
- 抓取和分析网页的类C#
- c#抓取和分析网页的类
- C#抓取和分析网页的类
- c#抓取网页内容乱码的解决方案
- C# 抓取网页类(获取网页中所有信息)
- c#抓取网页分析
- c#抓取网页分析
- c#抓取网页分析
- C#远程抓取网页
- C# 抓取网页内容
- C# 抓取网页内容
- C# 抓取网页数据
- J2SE学习笔记1 — Java语言的特性和发展历史
- 详解:IP的分类、寻址规则及子网掩码
- 学习IPC的心得。。。
- C++注册表操作大全
- javascript URL编码方法的比较(escape encodeURI encodeURIComponent)
- C#中抓取网页的方法
- Java IO 系列----流和Decorator设计模式
- vs2010 未定义的标识符"cout"
- 判断随机数
- server 有ip 地址, 但是ping 不通 (connect: Network is unreachable)
- CEGUI渲染概论
- csdn博客
- ALSA交叉编译与测试
- 一个jaxb的例子看java object和xml之间的转换