采集程序 -【开源项目】

简介:

更新:通过一些朋友的回复,了解到,可能文章太长了,有朋友只是简略浏览,所以还没有明白程序工作流程。

简单介绍,这个程序是给程序员用的,使用这个软件,必须是会写正则的朋友,或者是有朋友帮忙写正则。

这个程序不是针对某个网站或者网页而写的,而是一个“采集框架 ”——说是框架,有点大了。

但是核心的一点就是,只要会写正则,几分钟就可以针对一个采集目标,编写一个采集规则。

只需要4(3)个正则,就可以完成任务。

列表网址、页面标题、页面内容、页面链接

 

如果是逐页采集模式,列表网址的正则可以忽略。

 ------------------------------------------------

前言 

爱学习、爱使用移动设备阅读电子书的朋友,不能不拥有一款属于自己的采集利器。

而使用此程序即可以简单轻松的实现采集任务。

采集效果图

程序介绍

 在程序运行子目录 Config 是程序的配置的保存目录。

path.txt

[config]

Config\HtmlFormatConfig.xml

[task]

Config\task\

config 设置采集内容格式化的配置保存路径

task 设置任务工作规则保存和加载路径

 

采集工作窗体

起始网址

采集开始的网址,如果是逐页的模式,则是第一页的地址;

如果是列表的模式,则是第一个列表页面的地址。

列表网址

匹配下一个列表页面地址的正则表达式。

在逐页模式下,不用填写。

 

页面标题

匹配页面标题的正则表达式 

页面内容

匹配页面内容的正则表达式

页面链接

匹配内容页面链接的正则表达式

在逐页模式,采集到一个内容页面之后,可以匹配到下一个页面链接。

在列表模式,采集到一个列表页面之后,就可以匹配到若干个页面链接。

分页标识

识别是否为分页标题的匹配正则表达式

首页标识

第一页的标识,比如标题【科技业的员工到底有多年轻 1)】,那么标识可以是(1)

保存路径

采集内容的保存目录

分页处理

是指采集的文章资料是进行了分页的,那么程序会根据设定的规则,判断是否是分页章节,如果是,则不重复添加标题。

比如

科技业的员工到底有多年轻 1

科技业的员工到底有多年轻 2

科技业的员工到底有多年轻 3

那么采集过程中,只会写入一个标题【科技业的员工到底有多年轻】

保存为一个文件

如果勾选,则采集到的所有内容都写入到一个文件中

开始

开始采集并将内容保存

测试

在消息框显示采集的效果

格式化设置窗体

左边是匹配到的字符,后边是表示要替换成的字符。

程序运行时,会将第二行(如果有两行)的字符拷贝一份转换为大写组合在一起,进行格式化。

换行标签、空白标签、缩进标签

可以输入包含正则在内的字符进行匹配

章节标题

{0}表示采集的序号(采集一个地址则加1),{1}表示采集到的标题。

辅助功能

可以将输入的字符进行大小写转换

 

编写新规则

编写采集规则需要有一定的正则表达式的知识,如果不了解阅读这个页面:(正则表达式30分钟入门教程)http://deerchao.net/tutorials/regex/regex.htm

 

任务是以xml文件的形式保存,文件名命名格式是:任务名称 - 网站名称.xml

在任何一个任务状态下,只需要修改任务名称,或者网站名称,再点击保存任务,即可新建一个任务。

如果名称一样会提示是否覆盖。

 

这里以博客园新闻为例

博客园新闻是一个列表式的采集任务——在一个页面可以匹配得到若干个页面地址

http://news.cnblogs.com/

使用firebug或者其它前端调试工具,可以轻松得到采集特征

比如下图

 


 

点击红框【点击查看页面中的元素】然后在页面的【创业公司如何评估 – 度量公司潜力的方法】位置点下。

就可以定位到html代码

这样就可以获取到内容页面的链接特征


< h2  class ="news_entry" >
< target ="_blank"  href ="/n/182026/" >创业公司如何估值 — 度量公司潜力的方法 </ a >
</ h2 >

然后需要观察这个标识是不是唯一特征的,也就是这个特征匹配到的都是自己期望中的内容。否则就需要增加更多的限制特征。

 

将特征编写为匹配的正则表达式

 

源码说明

解决方案有3个项目组成

Forms是视窗程序

Framework是采集程序

Helper是辅助程序

 

由于考虑到以后会增加不同的采集任务,因此采用MDI窗体。

Config目录是默认配置

FrmFormatConfig是内容格式化配置窗体

FrmGatherWorker是采集工作窗体

MDIParentMain是窗体容器

Config是内容格式化配置实体类

Task是采集任务规则实体类

Worker是采集工作类

 

 

Worker采集工作类说明

先看看3个主要事件

复制代码
///   <summary>
///  错误触发事件,传入参数 引发的异常对象、错误的类型、当前工作的网址
///   </summary>
public  event Action<Exception, ErrorType,  string> OnError;

///   <summary>
///  工作结束触发事件
///   </summary>
public  event Action OnWorkEnd;

///   <summary>
///  一次/地址采集完成触发事件,传入参数 采集内容的标题、内容、网址
///   </summary>
public  event Action< stringstringstring> OnWorkItemEnd;
复制代码

 

创建对象

 
Worker work =  new Worker(_httpRequest, _config, _task);
work.OnError += w_OnError;
work.OnWorkItemEnd += work_OnWorkItemEnd;
work.OnWorkEnd += work_OnWorkEnd;

定义内容处理

复制代码
///   <summary>
///  一次(个网址)采集完成后,执行内容写入文件操作
///   </summary>
private  void work_OnWorkItemEnd( string curWebTitle,  string curWebContent,  string curUrl)
{
     // 将采集到的内容写入到文件流中
     byte[] byteWebContent = Encoding.UTF8.GetBytes(curWebContent);
     if (_task.IsSaveOnlyFile)
    {
         // 如果当前内容标题为空,则可能分页
         if (! string.IsNullOrEmpty(curWebTitle))
        {
             byte[] byteWebTitle = Encoding.UTF8.GetBytes(curWebTitle);
            _curSavaFile.Write(byteWebTitle,  0, byteWebTitle.Length);
        }
        _curSavaFile.Write(byteWebContent,  0, byteWebContent.Length);
    }
     else
    {
         using (FileStream curSavaFile2 =  new FileStream( " {0}{1}.txt ".FormatWith(_task.SavePath, curWebTitle), FileMode.OpenOrCreate, FileAccess.ReadWrite))
        {
            curSavaFile2.Write(byteWebContent,  0, byteWebContent.Length);
        }
    }
    UpdateWorkMessage( " \n已采集:{0},网址:{1} ".FormatWith(curWebTitle, curUrl));
    Application.DoEvents();
}
复制代码

  

其它更多,请下载源码查看

其它

运行程序下载:http://files.cnblogs.com/yelaiju/NWebGather.rar 

.net framework 4.0微软官网下载  http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
 

源码下载:http://files.cnblogs.com/yelaiju/NWebGather-src.rar

 

开源地址:https://github.com/alifellod/NWebGather

不了解github下载源码的方式,请看文章:http://www.cnblogs.com/yelaiju/p/3180986.html

正则词典(手册)http://www.cnblogs.com/yelaiju/p/3182854.html 

 

相关推荐项目:

 

园友:心态要好推荐 http://blog.csdn.net/sq_zhuyi/article/details/7924776

 

各位朋友对采集有兴趣,可以一起维护和贡献代码,如此大家都可以轻松的共享同一个采集框架。


本文转自火地晋博客园博客,原文链接:http://www.cnblogs.com/yelaiju/p/3180920.html,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
存储 数据采集 监控
SkyWalking全景解析:从原理到实现的分布式追踪之旅
SkyWalking全景解析:从原理到实现的分布式追踪之旅
422 1
|
11天前
|
Arthas 监控 IDE
去哪儿网开源的一个对应用透明,无侵入的Java应用诊断工具
今天 V 哥给大家带来一款开源工具Bistoury,Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力。
|
6月前
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
230 0
|
6月前
|
JSON 监控 安全
处理大规模数据流:使用Java编写公司聊天监控软件的数据处理模块
在今天的数字时代,企业越来越依赖聊天公司监控软件来确保员工的上网安全、保护敏感信息,并监测内部通信。为了更有效地处理和分析这些大规模数据流,公司通常需要自定义的数据处理模块。在本文中,我们将探讨如何使用Java编写这样的模块,同时确保跨平台部署。
174 0
|
11月前
|
存储 Prometheus 运维
基于SkyWalking的分布式跟踪系统 - 环境搭建
基于SkyWalking的分布式跟踪系统 - 环境搭建
176 0
|
消息中间件 监控 JavaScript
2.4K star,一个高性能、无侵入的Java性能监控和统计工具,有点东西!
2.4K star,一个高性能、无侵入的Java性能监控和统计工具,有点东西!
|
Arthas Java 测试技术
57-微服务技术栈(高级):在线检测工具Arthas(基础指令)
开发者对于生产问题故障的排查、定位,随着微服务的喷发,也不再像是以前那边依赖纯日志、gc日志进行问题排查与定位了,本节开始介绍一个生产环境使用的排错工具Arthas,帮助大家更高效、便捷地实现生产问题排错。
253 0
|
Linux
FuYao扶摇一款开源的信息收集工具
FuYao扶摇一款开源的信息收集工具
477 0
FuYao扶摇一款开源的信息收集工具
|
监控 前端开发 JavaScript
Sentry 监控 - 面向全栈开发人员的分布式跟踪 101 系列教程(第一部分)
Sentry 监控 - 面向全栈开发人员的分布式跟踪 101 系列教程(第一部分)
231 0
Sentry 监控 - 面向全栈开发人员的分布式跟踪 101 系列教程(第一部分)
|
存储 监控 JavaScript
Sentry 开发者贡献指南 - SDK 开发(性能监控)
Sentry 开发者贡献指南 - SDK 开发(性能监控)
839 0