首先大家需要清楚一点的是:任何网站的页面,无论是php、jsp、aspx这些动态页面还是用后台程序生成的静态页面都是可以在浏览器中查看其HTML源文件的。

所以当你要开发数据采集程序的时候,你必须先对你试图采集的网站的前台页面结构(HTML)要有所了解。

当你对要采集数据的网站里的HTML源文件内容十分熟悉之后,剩下程序上的事情就很好办了。因为C#对Web站点进行数据采集其原理就在于“把你要采集的页面HTML源文件下载下来,分析其中HTML代码然后抓取你需要的数据,最后将这些数据保存到本地文件”。

基本流程如下图所示:

1.页面源文件下载

首先引用System.Net命名空间

using System.Net;

此外还需引用

using System.Text;
using System.IO;

引用完后实例化一个WebClient对象

private WebClient wc = new WebClient();

调用DownloadData方法将指定网页的源文件下载一组BYTE数据,然后将BYTE数组转为字符串。

//下载页面源文件并将其转换成UTF8编码格式的STRING
string mainData = Encoding.UTF8.GetString(wc.DownloadData(string.Format("你要采集的网页地址")));

或则也可以调用DownloadFile方法,先将源文件下载到本地然后再读取其字符串

//下载网页源文件到本地
wc.DownloadFile("你要采集的网页URL","保存源文件的本地文件路径");
//读取下载下来的源文件HTML格式的字符串
string mainData = File.ReadAllText("保存源文件的本地文件路径",Encoding.UTF8);

有了网页HTML格式字符串,就可以对网页分析采集并抓取你所需要的内容了。

2.页面分析采集

页面分析就是要将网页源文件中某个特定或是唯一的字符(串)作为抓取点,以这个抓取点作为开端来截取你想要的页面上的数据。

以博客园为列,比方说我要采集博客园首页上列出来的文章的标题和链接,就必须以"<a class=\"titlelnk\" href=\""作为抓取点,以此展开来抓取文章的标题和链接。

//以"<a class=\"titlelnk\" href=\""作为抓取点开始采集
mainData=mainData.Substring(mainData.IndexOf("<a class=\"titlelnk\" href=\"") + ); //获取文章页面的链接地址
string articleAddr = mainData.Substring(,mainData.IndexOf("\"")); //获取文章标题
string articleTitle = mainData.Substring(mainData.IndexOf("target=\"_blank\">") + ,
mainData.IndexOf("</a>") - mainData.IndexOf("target=\"_blank\">") - );

注意:当你要采集的网页前台HTML格式变了之后,作为抓取点的字符窜也因做相应地改变,否则是采集不到任何东西的

3.数据保存

当你把需要的数据从网页截取下来后,将数据在程序中稍加整理保存到本地文件(或插入到自己本地的数据库中)。这样整个采集工作就算搞一段落了。

//输出数据到本地文件
File.AppendAllText(CreateFolderIfNot(Settings.Default.OutPath) + articleTitle + ".txt",
articleData,
Encoding.UTF8);

程序效果如下:

via:http://www.cnblogs.com/youuuu/archive/2011/06/17/2083714.html

C# 实现对网站数据的采集和抓取的更多相关文章

  1. 【转】详解抓取网站,模拟登陆,抓取动态网页的原理和实现(Python,C#等)

    转自:http://www.crifan.com/files/doc/docbook/web_scrape_emulate_login/release/html/web_scrape_emulate_ ...

  2. 写论文,没数据?R语言抓取网页大数据

    写论文,没数据?R语言抓取网页大数据 纵观国内外,大数据的市场发展迅猛,政府的扶持也达到了空前的力度,甚至将大数据纳入发展战略.如此形势为社会各界提供了很多机遇和挑战,而我们作为卫生(医学)统计领域的 ...

  3. java抓取网页数据,登录之后抓取数据。

    最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一 ...

  4. App的数据如何用python抓取

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. App中的数据可以用网络爬虫抓取么 答案是完全肯定的:凡是可以看到的APP数 ...

  5. 【python小随笔】python 解析xml数据的新手大坑>>抓取多重标签,遍历各标签的数据

    xml文档: <GetMatchingProductResult ASIN="B071LF9R6G" status="Success">...< ...

  6. 大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)

    摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如 ...

  7. [Python爬虫] 之二十二:Selenium +phantomjs 利用 pyquery抓取界面网站数据

    一.介绍 本例子用Selenium +phantomjs爬取界面(https://a.jiemian.com/index.php?m=search&a=index&type=news& ...

  8. [Python爬虫] 之二十一:Selenium +phantomjs 利用 pyquery抓取36氪网站数据

    一.介绍 本例子用Selenium +phantomjs爬取36氪网站(http://36kr.com/search/articles/电视?page=1)的资讯信息,输入给定关键字抓取资讯信息. 给 ...

  9. 使用 Python 抓取欧洲足球联赛数据

    Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤    数据的采集和获取    数据的清洗,抽取,变形和装载    数据的分析,探索和预测    ...

随机推荐

  1. [转] C# TextBox、DataGrideView中的数据绑定

    Xavierr 原文 C#数据绑定——简单的文本框绑定.DataGridView 一.TextBox的数据绑定 经常写用一个TextBox显示某个对象,然后编辑之后再保存的程序.以前都是在TextBo ...

  2. Linux目录初识

    / 根目录 /bin 存放必要的命令 /boot 存放内核以及启动所需的文件/dev 存放设备文件 /etc 存放系统配置文件 /home 普通用户的宿主目录,用户数据存放在其主目录中 /lib 存放 ...

  3. SoapUI Property

    1. Test Suite(Case) Property 选择Test Suite(Case),switch to Custom properties 在request中的引用方式: ${[scope ...

  4. eclipse 编辑器的使用

    随着所编辑的文件数目的增加以及在这些文件之间的快速切换,一个又一个文件的编码以及对编辑器会话(session)的管理将会变得非常复杂.这时,有几件事情你是可以做的. 通过使用键盘快捷键,你可以快速选择 ...

  5. C#单元测试

    简单来说,单元测试就是局部测试,即是对项目中的某个静态类测试.静态方法测试.类的实例化测试以及类的方法测试.当您有一个具体的项目时您可以通过运行查看结果的方式进行测试,但当您只有一个类而没有完整的项目 ...

  6. atoi()函数的实现

    atoi()函数的功能:将字符串转换成整型数:atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时('\0')才结束转化,并将结果返回( ...

  7. HLS -- m3u8档案格式解析

    1. Playlist file 一个M3U的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分.每一行可以是一个URI.空白行或 是以”#“号开头的字符串,并且空格只能存在 ...

  8. CUDA ---- Hello World From GPU

    本篇博文仅实现hello world,先看到效果,具体细节将在后续博文解释. 准备 如果你是第一次使用CUDA,在Linux下可以使用下面的命令来检查CUDA编译器是否安装正确: $ which nv ...

  9. error while loading shared libraries: lib******: cannot open shared object file: No such file or directory

    程序编译成功后,运行时错误: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object fi ...

  10. onAttachedToWindow()在整个Activity生命周期的位置及使用

    onAttachedToWindow在整个Activity的生命周期中占据什么位置? 为什么要在onAttachedToWindow中修改窗口尺寸? 一.onAttachedToWindow在Acti ...