热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

采集程序【开源项目】

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

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

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

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

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

只需要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&#61;"news_entry">
<target&#61;"_blank" href&#61;"/n/182026/">创业公司如何估值 — 度量公司潜力的方法a>
h2>

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

 

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

 

源码说明

解决方案有3个项目组成

Forms是视窗程序

Framework是采集程序

Helper是辅助程序

 

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

Config目录是默认配置

FrmFormatConfig是内容格式化配置窗体

FrmGatherWorker是采集工作窗体

MDIParentMain是窗体容器

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

Task是采集任务规则实体类

Worker是采集工作类

 

 

Worker采集工作类说明

先看看3个主要事件

/// 
/// 错误触发事件&#xff0c;传入参数 引发的异常对象、错误的类型、当前工作的网址
/// 

public event Actionstring> OnError;

/// 
/// 工作结束触发事件
/// 

public event Action OnWorkEnd;

/// 
/// 一次/地址采集完成触发事件&#xff0c;传入参数 采集内容的标题、内容、网址
/// 

public event Action<stringstringstring> OnWorkItemEnd;

 

创建对象

 
Worker work &#61; new Worker(_httpRequest, _config, _task);
work.OnError &#43;&#61; w_OnError;
work.OnWorkItemEnd &#43;&#61; work_OnWorkItemEnd;
work.OnWorkEnd &#43;&#61; work_OnWorkEnd;

定义内容处理

/// 
/// 一次(个网址)采集完成后&#xff0c;执行内容写入文件操作
/// 

private void work_OnWorkItemEnd(string curWebTitle, string curWebContent, string curUrl)
{
    //将采集到的内容写入到文件流中
    byte[] byteWebContent &#61; Encoding.UTF8.GetBytes(curWebContent);
    if (_task.IsSaveOnlyFile)
    {
        //如果当前内容标题为空&#xff0c;则可能分页
        if (!string.IsNullOrEmpty(curWebTitle))
        {
            byte[] byteWebTitle &#61; Encoding.UTF8.GetBytes(curWebTitle);
            _curSavaFile.Write(byteWebTitle, 0, byteWebTitle.Length);
        }
        _curSavaFile.Write(byteWebContent, 0, byteWebContent.Length);
    }
    else
    {
        using (FileStream curSavaFile2 &#61; new FileStream("{0}{1}.txt".FormatWith(_task.SavePath, curWebTitle), FileMode.OpenOrCreate, FileAccess.ReadWrite))
        {
            curSavaFile2.Write(byteWebContent, 0, byteWebContent.Length);
        }
    }
    UpdateWorkMessage("\n已采集&#xff1a;{0}&#xff0c;网址&#xff1a;{1}".FormatWith(curWebTitle, curUrl));
    Application.DoEvents();
}

  

其它更多&#xff0c;请下载源码查看

其它

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

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

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

 

开源地址&#xff1a;https://github.com/alifellod/NWebGather

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

正则词典&#xff08;手册&#xff09;http://www.cnblogs.com/yelaiju/p/3182854.html 

 

相关推荐项目:

园友:SmartBooks作品    https://github.com/smartbooks/SmartSpider

 

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

 

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


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



推荐阅读
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • SpringMVC RestTemplate的几种请求调用(转)
    SpringMVCRestTemplate的几种请求调用(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文探讨了在UC浏览器中调用分享面板后,图片无法正常显示的问题,并提供了详细的解决方法和代码示例。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文探讨了如何在Hive(基于Hadoop)环境中编写类似SQL的语句,以去除字段中的空格。特别是在处理邮政编码等数据时,去除特定位置的空格是常见的需求。 ... [详细]
  • 本文介绍如何在Java中实现一个罗马数字计算器,重点在于如何通过循环和字符验证确保用户输入合法。我们将探讨创建一个方法来检查字符串中的非法字符,并使用循环不断提示用户输入,直到输入符合要求。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
author-avatar
k172ausoreor_878
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有