C#获取网页内容 (WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
获取网页数据有很多种方式。在这里主要讲述通过WebClient、WebBrowser和HttpWebRequest/HttpWebResponse三种方式获取网页内容。
这里获取的是包括网页的所有信息。如果单纯需要某些数据内容。可以自己构造函数甄别抠除出来!一般的做法是根据源码的格式,用正则来过滤出你需要的内容部分。
一、通过WebClient获取网页内容
这是一种很简单的获取方式,当然,其它的获取方法也很简单。在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域。大概写法如下
- //MemoryStream是一个支持储存区为内存的流。
 - byte[] buffer = new byte[1024];
 - using (MemoryStream memory = new MemoryStream())
 - {
 - int index = 1, sum = 0;
 - while (index * sum < 100 * 1024)
 - {
 - index = reader.Read(buffer, 0, 1024);
 - if (index > 0)
 - {
 - memory.Write(buffer, 0, index);
 - sum += index;
 - }
 - }
 - //网页通常使用utf-8或gb2412进行编码
 - Encoding.GetEncoding("gb2312").GetString(memory.ToArray());
 - if (string.IsNullOrEmpty(html))
 - {
 - return html;
 - }
 - else
 - {
 - Regex re = new Regex(@"charset=(? charset[/s/S]*?)[ |']");
 - Match m = re.Match(html.ToLower());
 - encoding = m.Groups[charset].ToString();
 - }
 - if (string.IsNullOrEmpty(encoding) || string.Equals(encoding.ToLower(), "gb2312"))
 - {
 - return html;
 - }
 - }
 
//MemoryStream是一个支持储存区为内存的流。
byte[] buffer = new byte[1024];
using (MemoryStream memory = new MemoryStream())
{
int index = 1, sum = 0;
while (index * sum < 100 * 1024)
{
index = reader.Read(buffer, 0, 1024);
if (index > 0)
{
memory.Write(buffer, 0, index);
sum += index;
}
}
//网页通常使用utf-8或gb2412进行编码
Encoding.GetEncoding("gb2312").GetString(memory.ToArray());
if (string.IsNullOrEmpty(html))
{
return html;
}
else
{
Regex re = new Regex(@"charset=(? charset[/s/S]*?)[ |']");
Match m = re.Match(html.ToLower());
encoding = m.Groups[charset].ToString();
}
if (string.IsNullOrEmpty(encoding) || string.Equals(encoding.ToLower(), "gb2312"))
{
return html;
}
}
好了,现在进入正题,WebClient获取网页数据的代码如下
- //using System.IO;
 - try
 - {
 - WebClient webClient = new WebClient();
 - webClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
 - Byte[] pageData = webClient.DownloadData("http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml");
 - //string pageHtml = Encoding.Default.GetString(pageData); //如果获取网站页面采用的是GB2312,则使用这句
 - string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
 - using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本
 - {
 - htm = sw.ToString();//测试StreamWriter流的输出状态,非必须
 - sw.Write(pageHtml);
 - }
 - }
 - catch (WebException webEx)
 - {
 - Console.W
 - }
 
//using System.IO;
try
{
WebClient webClient = new WebClient();
webClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
Byte[] pageData = webClient.DownloadData("http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml");
//string pageHtml = Encoding.Default.GetString(pageData); //如果获取网站页面采用的是GB2312,则使用这句
string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本
{
htm = sw.ToString();//测试StreamWriter流的输出状态,非必须
sw.Write(pageHtml);
}
}
catch (WebException webEx)
{
Console.W
}
二、通过WebBrowser控件获取网页内容
相对来说,这是一种最简单的获取方式。拖WebBrowser控件进去,然后匹配下面这段代码
- WebBrowser web = new WebBrowser();
 - web.Navigate("http://www.163.com");
 - web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
 - void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
 - {
 - WebBrowser web = (WebBrowser)sender;
 - HtmlElementCollection ElementCollection = web.Document.GetElementsByTagName("Table");
 - foreach (HtmlElement item in ElementCollection)
 - {
 - File.AppendAllText("Kaijiang_xj.txt", item.InnerText);
 - }
 - }
 
WebBrowser web = new WebBrowser();
web.Navigate("http://www.163.com");
web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser web = (WebBrowser)sender;
HtmlElementCollection ElementCollection = web.Document.GetElementsByTagName("Table");
foreach (HtmlElement item in ElementCollection)
{
File.AppendAllText("Kaijiang_xj.txt", item.InnerText);
}
}
三、使用HttpWebRequest/HttpWebResponse获取网页内容
这是一种比较通用的获取方式。
- public void GetHtml()
 - {
 - var url = "http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml";
 - string strBuff = "";//定义文本字符串,用来保存下载的html
 - int byteRead = 0;
 - HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
 - HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
 - //若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理
 - Stream reader = webResponse.GetResponseStream();
 - ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)
 - StreamReader respStreamReader = new StreamReader(reader,Encoding.UTF8);
 - ///分段,分批次获取网页源码
 - char[] cbuffer = new char[1024];
 - byteRead = respStreamReader.Read(cbuffer,0,256);
 - while (byteRead != 0)
 - {
 - string strResp = new string(char,0,byteRead);
 - strBuff = strBuff + strResp;
 - byteRead = respStreamReader.Read(cbuffer,0,256);
 - }
 - using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本
 - {
 - htm = sw.ToString();//测试StreamWriter流的输出状态,非必须
 - sw.Write(strBuff);
 - }
 - }
 
C#获取网页内容 (WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)的更多相关文章
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
		
一.通过WebClient获取网页内容 这是一种很简单的获取方式,当然,其它的获取方法也很简单.在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域.大概写法如下 //M ...
 - C#获取网页内容的三种方式
		
C#通常有三种方法获取网页内容,使用WebClient.WebBrowser或者HttpWebRequest/HttpWebResponse... 方法一:使用WebClient (引用自:http: ...
 - C#获取网页内容的三种方式(转)
		
搜索网络,发现C#通常有三种方法获取网页内容,使用WebClient.WebBrowser或者HttpWebRequest/HttpWebResponse... 方法一:使用WebClient (引用 ...
 - 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用
		
最近经常需要下载一些东西,而这个下载地址又会经过层层跳转,每个页面上都有很多广告,烦不胜烦,所以做了一个一键获得最终下载地址的小工具.使用C#,来获取网页内容,然后通过HtmlAgilityPack获 ...
 - HttpWebRequest,HttpWebResponse的用法和用途
		
1.用途:HettpWebRequest,HettpWebResponse用途和webServers的作用差不多,都是得到一个页面传过来的值.HttpWebRequest 2.用法:--------- ...
 - 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)
		
定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...
 - 使用Jsoup获取网页内容超时设置
		
使用Jsoup获取网页内容超时设置 最近使用Jsoup来抓取网页,并对网页进行解析,发现很好用.在抓取过程中遇到一个问题,有些页面总是报Timeout异常,开始想是不是被抓取网站对IP进行了限制,后来 ...
 - 基于apache —HttpClient的小爬虫获取网页内容
		
今天(17-03-31)忙了一下午研究webmagic,发现自己还太年轻,对于这样难度的框架(类库) 还是难以接受,还是从基础开始吧,因为相对基础的东西教程相多一些,于是乎我找了apache其下的 H ...
 - 使用selenium和phantomJS浏览器获取网页内容的小演示
		
# 使用selenium和phantomJS浏览器获取网页内容的小演示 # 导入包 from selenium import webdriver # 使用selenium库里的webdriver方法调 ...
 
随机推荐
- Java 并发 线程同步
			
Java 并发 线程同步 @author ixenos 同步 1.异步线程本身包含了执行时需要的数据和方法,不需要外部提供的资源和方法,在执行时也不关心与其并发执行的其他线程的状态和行为 2.然而,大 ...
 - Maven之(八)约定优于配置
			
maven的配置文件看似很复杂,其实只需要根据项目的实际背景,设置个别的几个配置项而已.maven有自己的一套默认配置,使用者除非必要,并不需要去修改那些约定内容.这就是所谓的"约定优于配置 ...
 - 在GNU/Linux下使用Lilypond排版简谱
			
尽管GNU/Linux并非无所不能,但确实能在很多时候提供免费.开放的解决方案.这两天我想做一个简谱,在网上搜索乐谱排版软件,发现了基于GPL协议的Lilypond软件.只不过Lilypond是用来做 ...
 - Gentoo/Arch常用软件配置
			
## Desktop Environment ### GNOME ### KDE ### LXDE ### Xfce ## Window Managers ### dwm x11-wm/dwm ### ...
 - LoadLibraryW 参数问题
			
error C2664: "LoadLibraryW": 不能将参数1 从"const char [8]"转换为"LPCWSTR" 右击工程 ...
 - hadoop(一)
			
1 环境熟悉安装jdk.hadoop配置xml文件,启动伪分布式运行example-jar,测试mapreduce程序2 mapreduce编程使用eclipse开发mapreduce程序,导出jar ...
 - Tiny6410之NAND FLASH驱动
			
一.NAND FLASH的特点 S3C6410的NAND FLASH控制器有如下特点 1.自导入模式:复位后,引导代码被送入到8KB的STEPPINGSTONE中,引导代码移动完毕,引导代码将在STE ...
 - 微信小程序推荐
			
工具类 快递100助手:查快递,寄快递. 驾考帮手:为您提供科目一.科目四的测试题练习. 翻译e:多国语言在线翻译,中英.中日.中俄.中法快速翻译,专业翻译. 朝夕日历Pro:一个日历管理 app,你 ...
 - java操作mongodb——更新数据
			
Java中可以通过updateOne,updateMany,replaceOne方法进行集合的文档更新.但是 _id 是不能更新的 updateOne只会更新一条数据,即使通过Filters.lt(& ...
 - Python学习笔记——基础篇【第六周】——shutil模块
			
常用模块之shutil 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length]) 将文件内容拷贝到另一个文件中,可以部分内容 def c ...