C#实现对网站数据的采集和抓取

news/2024/5/12 20:52:33/文章来源:https://blog.csdn.net/iteye_1503/article/details/82298849

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

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

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

基本流程如下图所示:

1.页面源文件下载

首先引用System.Net命名空间

usingSystem.Net;

此外还需引用

usingSystem.Text;
usingSystem.IO;
复制代码

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

privateWebClientwc=newWebClient();

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

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

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

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

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

2.页面分析采集

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

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

CODE:

//以"<aclass=\"titlelnk\"href=\""作为抓取点开始采集
mainData=mainData.Substring(mainData.IndexOf("<aclass=\"titlelnk\"href=\"")+26);

//获取文章页面的链接地址
stringarticleAddr=mainData.Substring(0,mainData.IndexOf("\""));

//获取文章标题
stringarticleTitle=mainData.Substring(mainData.IndexOf("target=\"_blank\">")+16,
mainData.IndexOf(
"</a>")-mainData.IndexOf("target=\"_blank\">")-16);
复制代码

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

3.数据保存

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

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

此外附上一个我自己写的采集博客园首页文章的小程序代码,该程序的功能是可以将发布到博客园首页上所有文章采集下来。

下载地址:CnBlogCollector.rar

当然如果博客园前台页面格式调整了,那程序的采集功能肯定是无效的了,只能自己重新调整程序才能继续采集,呵呵。。。

程序效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_743035.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个命令,让你的网站支持https

介绍 最近写小程序&#xff0c;但是小程序的接口得通过https的形式访问&#xff0c;所以用nginx转发了一下。想到Google搜索引擎会提高https网站的权重&#xff0c;索性把我的网站改造成同时支持http和https了。看效果 http形式访问 https形式访问 我是用LET’S ENCRYPT来生…

用Wordpress搭建独立网站

基于CentOS7搭建 前期环境 yum的一些命令 yum -y install 包名&#xff08;支持*&#xff09; &#xff1a;自动选择y&#xff0c;全自动 yum install 包名&#xff08;支持*&#xff09; &#xff1a;手动选择y or n yum remove 包名&#xff08;不支持*&#xff09;先把ph…

【读书笔记】大型网站架构演化

写在最前面 强烈推荐李智慧老师所著的《大型网站技术架构》一书&#xff0c;它能带领你从一个俯瞰的角度清晰的了解了一个网站的架构设计&#xff01;本菜鸡以前每次接到一个项目的时候&#xff0c;总是一开始就罗列各种需要实现的功能&#xff0c;然后马上着手开始设计数据库…

【读书笔记】网站的高性能架构

前言 本菜鸡之前有过一篇读书笔记&#xff0c;整理了李智慧老师所著的《大型网站技术架构》一书中叙述的五个架构要素。这五个要素分别为 性能、可用性、伸缩性、扩展性、安全性。本文针对性能这一要素进行展开讨论&#xff0c;内容也主要参考自《大型网站技术架构》这本书&am…

【读书笔记】网站的高可用架构

前言 本菜鸡之前有过一篇读书笔记&#xff0c;整理了李智慧老师所著的《大型网站技术架构》一书中叙述的五个架构要素。这五个要素分别为 性能、可用性、伸缩性、扩展性、安全性。本文针对可用性这一要素进行简单的讨论&#xff0c;内容也主要参考自《大型网站技术架构》这本书…

【读书笔记】网站的伸缩性架构

前言 本菜鸡之前有过一篇读书笔记&#xff0c;整理了李智慧老师所著的《大型网站技术架构》一书中叙述的五个架构要素。这五个要素分别为 性能、可用性、伸缩性、扩展性、安全性。本文针对伸缩性这一要素进行简单的讨论&#xff0c;内容也主要参考自《大型网站技术架构》这本书…

【读书笔记】网站的可扩展架构

前言 本菜鸡之前有过一篇读书笔记&#xff0c;整理了李智慧老师所著的《大型网站技术架构》一书中叙述的五个架构要素。这五个要素分别为 性能、可用性、伸缩性、扩展性、安全性。本文针对扩展性这一要素进行简单的讨论&#xff0c;内容也主要参考自《大型网站技术架构》这本书…

【读书笔记】网站的安全架构

前言 本菜鸡之前有过一篇读书笔记&#xff0c;整理了李智慧老师所著的《大型网站技术架构》一书中叙述的五个架构要素。这五个要素分别为 性能、可用性、伸缩性、扩展性、安全性。本文针对安全性这一要素进行简单的讨论&#xff0c;内容也主要参考自《大型网站技术架构》这本书…

[导入]国内web2.0网站的logo集合

国内web2.0网站的logo集合,收集过程中难免有遗漏,请到 http://www.yupoo.com/word/web2补上甘先生 2006-02-13 18:03 文章来源:http://www.blogjava.net/gump/archive/2006/02/13/30487.html转载于:https://www.cnblogs.com/cngump/archive/2006/05/16/401486.html

[转载]说说大型高并发高负载网站的系统架构

说说大型高并发高负载网站的系统架构 By Michael转载请保留出处&#xff1a;俊麟 Michael’s blog (http://www.toplee.com/blog/?p71) Trackback Url : http://www.toplee.com/blog/wp-trackback.php?p71 我在CERNET做过拨号接入平台的搭建&#xff0c;而后在Yahoo&372…

PHP网站事件流,详解DOM事件流的三个阶段

事件发生时会在元素节点之间按照特定的顺序传播&#xff0c;这个传播过程即DOM事件流。DOM事件流分为三个阶段&#xff0c;分别为&#xff1a;捕获阶段&#xff1a;事件从Document节点自上而下向目标节点传播的阶段&#xff1b;目标阶段&#xff1a;真正的目标节点正在处理事件…

Windows 7 即将发布 - 91%的应用程序、92%的硬件设备和95%的网站完美兼容

Windows Vista的兼容性往往被大家所诟病&#xff0c;Windows 7打算一血前仇了。经过了长达2年的兼容性测试和改进&#xff0c;已经有91%的应用程序、92%的硬件设备和95%的网站完美兼容Windows 7。在这个过程中&#xff0c;作为微软在北京的Windows 7兼容性测试支持中心&#xf…

网站CSS背景图片抓取工具

工具介绍&#xff1a;  1&#xff09;分析网页&#xff0c;获取页面图片。  2&#xff09;分析网页引用CSS文件&#xff0c;获取背景图片。  3&#xff09;批量下载。要点&#xff1a;  1&#xff09;正则 LINK_PATTERN&#xff1a;获取页面所有连接 BACKGROUND_IMAGE_…

网站服务器基本安全设置

一、服务器系统安装建议1、不安装多余组件&#xff0c;停止不需要的服务&#xff1b;2、www服务单独分区&#xff1b;3、补丁打全&#xff1b;二、登录账号与口令安全1、设置密码使用、数字加大小写字母不少余8位&#xff1b;# vi /etc/login.defs找到以下:PASS_MAX_DAYS 99…

查看网站服务器版本,查看服务器版本

您正在运行的 Tableau Server 的版本很重要。它确定您可以访问的功能和能力。在您进行升级时&#xff0c;版本也很重要&#xff0c;因为在某些情况下&#xff0c;您升级的方式取决于您从中升级的版本&#xff0c;以及要升级到的版本。了解如何查找版本之后&#xff0c;就很容易…

Java开发者必去的20个英文技术网站

为什么80%的码农都做不了架构师&#xff1f;>>> http://www.javaalmanac.com - Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处. http://www.onjava.com - OReilly的Java网站. 每周都有新文章. http://java.sun.c…

从零开始建站-4

为什么80%的码农都做不了架构师&#xff1f;>>> 这里记录使用wordpress建站中遇到的问题 1、增加外网访问功能 登录数据库&#xff0c;在wp_options表中&#xff0c;修改字段 siteurl 和home均为 /wordpress&#xff0c;这里的wordpress的绝对路径为/var/www/htm…

Dreamwear如何创建javascript_15个免费学习JavaScript的最佳网站

作者&#xff1a;行者转发链接&#xff1a;https://codegeekz.com/15-best-websites-to-learn-javascript/前言JavaScript是Web最流行的语言。对于任何Web开发人员来说&#xff0c;JavaScript现在是必须学习的语言。像追踪树这样的创新已经大大提高了JavaScript的性能&#xff…

5分钟必懂-搭建网站框架踩到的坑之获取ServletPath

路径问题RealPathServletPathContextPathRequestURI获取真实ServletPath的方法RealPath String realPathrequest.getServletContext().getRealPath(); String realPathrequest.getServletContext().getRealPath("XXX");1)取得服务应用的绝对路径&#xff08;本地路径…

【nosql实现企业网站系列之一】mongodb的安装

本系列文章将使用Mongodb作为nosql的数据保存载体&#xff0c;显示载体使用aspnetmvc3&#xff0c;依赖注入容器使用unity application 2。 需要使用Mongodb首先需要安装。 一、下载Mongodb 地址&#xff1a;http://downloads.mongodb.org/win32/mongodb-win32-x86_64-2008plus…