一、通过WebClient获取网页内容

这是一种很简单的获取方式,当然,其它的获取方法也很简单。在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域。大概写法如下

  1. //MemoryStream是一个支持储存区为内存的流。
  2. byte[] buffer = new byte[1024];
  3. using (MemoryStream memory = new MemoryStream())
  4. {
  5. int index = 1, sum = 0;
  6. while (index * sum < 100 * 1024)
  7. {
  8. index = reader.Read(buffer, 0, 1024);
  9. if (index > 0)
  10. {
  11. memory.Write(buffer, 0, index);
  12. sum += index;
  13. }
  14. }
  15. //网页通常使用utf-8或gb2412进行编码
  16. Encoding.GetEncoding("gb2312").GetString(memory.ToArray());
  17. if (string.IsNullOrEmpty(html))
  18. {
  19. return html;
  20. }
  21. else
  22. {
  23. Regex re = new Regex(@"charset=(? charset[/s/S]*?)[ |']");
  24. Match m = re.Match(html.ToLower());
  25. encoding = m.Groups[charset].ToString();
  26. }
  27. if (string.IsNullOrEmpty(encoding) || string.Equals(encoding.ToLower(), "gb2312"))
  28. {
  29. return html;
  30. }
  31. }

好了,现在进入正题,WebClient获取网页数据的代码如下

  1. //using System.IO;
  2. try
  3. {
  4. WebClient webClient = new WebClient();
  5. webClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
  6. Byte[] pageData = webClient.DownloadData("http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml");
  7. //string pageHtml = Encoding.Default.GetString(pageData);  //如果获取网站页面采用的是GB2312,则使用这句
  8. string pageHtml = Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
  9. using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本
  10. {
  11. htm = sw.ToString();//测试StreamWriter流的输出状态,非必须
  12. sw.Write(pageHtml);
  13. }
  14. }
  15. catch (WebException webEx)
  16. {
  17. Console.W
  18. }

二、通过WebBrowser控件获取网页内容

相对来说,这是一种最简单的获取方式。拖WebBrowser控件进去,然后匹配下面这段代码

  1. WebBrowser web = new WebBrowser();
  2. web.Navigate("http://www.163.com");
  3. web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
  4. void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
  5. {
  6. WebBrowser web = (WebBrowser)sender;
  7. HtmlElementCollection ElementCollection = web.Document.GetElementsByTagName("Table");
  8. foreach (HtmlElement item in ElementCollection)
  9. {
  10. File.AppendAllText("Kaijiang_xj.txt", item.InnerText);
  11. }
  12. }

三、使用HttpWebRequest/HttpWebResponse获取网页内容

这是一种比较通用的获取方式。

  1. public void GetHtml()
  2. {
  3. var url = "http://www.360doc.com/content/11/0427/03/1947337_112596569.shtml";
  4. string strBuff = "";//定义文本字符串,用来保存下载的html
  5. int byteRead = 0;
  6. HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
  7. HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
  8. //若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理
  9. Stream reader = webResponse.GetResponseStream();
  10. ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)
  11. StreamReader respStreamReader = new StreamReader(reader,Encoding.UTF8);
  12. ///分段,分批次获取网页源码
  13. char[] cbuffer = new char[1024];
  14. byteRead = respStreamReader.Read(cbuffer,0,256);
  15. while (byteRead != 0)
  16. {
  17. string strResp = new string(char,0,byteRead);
  18. strBuff = strBuff + strResp;
  19. byteRead = respStreamReader.Read(cbuffer,0,256);
  20. }
  21. using (StreamWriter sw = new StreamWriter("e:\\ouput.txt"))//将获取的内容写入文本
  22. {
  23. htm = sw.ToString();//测试StreamWriter流的输出状态,非必须
  24. sw.Write(strBuff);
  25. }
  26. }

C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)的更多相关文章

  1. ios网络学习------4 UIWebView的加载本地数据的三种方式

    ios网络学习------4 UIWebView的加载本地数据的三种方式 分类: IOS2014-06-27 12:56 959人阅读 评论(0) 收藏 举报 UIWebView是IOS内置的浏览器, ...

  2. Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式

    Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式 P703 Linux读写内存数据的三种方式 1.read  ,write方式会在用户空间和内核空间不断拷贝数据, ...

  3. 讨论HTTP POST 提交数据的几种方式

    转自:http://www.cnblogs.com/softidea/p/5745369.html HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PU ...

  4. Day20-单表中获取表单数据的3种方式

    1. 搭建环境请参考:http://www.cnblogs.com/momo8238/p/7508677.html 2. 创建表结构 models.py from django.db import m ...

  5. 在.NET Core 中收集数据的几种方式

    APM是一种应用性能监控工具,可以帮助理解系统行为, 用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题, 通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理 ...

  6. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  7. .NET MVC控制器向视图传递数据的四种方式

    .NET MVC控制器向视图传递数据的四种方式: 1.ViewBag  ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...

  8. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  9. Solr 删除数据的几种方式

    原文出处:http://blog.chenlb.com/2010/03/solr-delete-data.html 有时候需要删除 Solr 中的数据(特别是不重做索引的系统中,在重做索引期间).删除 ...

随机推荐

  1. C# Chart使用总结 2 ---------chart悬停选定数值操作

    1.用鼠标悬停事件处理 private void Form1_Load(object sender, EventArgs e) { //connStr = connPath1 + conn2; fil ...

  2. MySQL查看当前的连接信息

    1:查看当前有多少个连接 mysql> status; Threads: 4 2:查看连接的详细信息 mysql> SHOW FULL PROCESSLIST;

  3. Rotate Image 旋转图像

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  4. OpenCV学习代码记录——人脸检测

    很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...

  5. Linux中搭建一个ftp服务器详解

    来源:Linux社区  作者:luzhi1024 详解Linux中搭建一个ftp服务器. ftp工作是会启动两个通道:控制通道 , 数据通道在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种 ...

  6. lua -- 所有UI组件的基类

    -- 组件行为基础 local Behavior = class("Behavior"); function Behavior:ctor(name) self.owner = ni ...

  7. github贡献开源项目

    1.正常流程 1.拷贝项目到自己的github 2.本地修改后提交远程仓库 3.创建讨论Pull requests 4.开源项目者合并到master分支 5.删除仓库 2.快速发出讨论Pull req ...

  8. 3. ELMo算法原理解析

    1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...

  9. ssh-remote-port-forwarding

    1.ssh免密码登录(A登录到B) 1.1.在A上执行并在~/.ssh下生成id_rsa和id_rsa.pub两个文件 ssh-keygen -t rsa -P '' 1.2.拷贝id_rsa.pub ...

  10. 【linux】——cscope

    cscope是一款linux下的软件,其功能主要是用在阅读代码,堪称Windows下的Source Insight,但是配合vim使用,效率无与伦比.如需了解其具体使用,请先安装vim,然后在终端执行 ...