最近做一些抓取工作,从一个行业的网站上抓取想要的信息。由于各个网站的页面各不一样,一般的实现是为某一类特定的页面编写一个解析器。如果抓取的网站少还好点,但是当网站数量多时,这就是最笨的方法了。
所以抽了点时间实现了一个基于XML的可配置的解析工具。功能只要有:
- 支持正则表达式抽取数据
- 支持SPEL运算,需要spring的相关包
- 支持工具类的方法调用,对抽取数据进行后续处理
- xml描述继承
- 数据校验(校验失败时抛出异常,包那个字段在那个url页面解析过程中发生了问题)
使用:只需要提交要抽取的页面的URL。返回指定对象。这样做其实开发工作并没有很大的减少,只是更便于管理和扩展。
此工具大致由以下几部分组成:
- 控制器ExtractorController,主要功能有读取配置文件和对外提供统一接口 Object extractHtml(String url)。
- 读取配置文件时初始化一个配置文件目录。按照配置文件之间的依赖关系读取配置元数据,存入Extractor对象。
- 配置文件主要分为字段定义、预定义两部分。
- 预定义主要是一些在解析页面过程中的一些临时变量(如用正则获取的一些临时字符串,或一些http请求内容,一些页面的部分数据是通过ajax加载的)。
- 字段的定义,字段名称和对象名称一致,包含一个required属性,用于校验判断抽取的正确性。
- 字段包含若干个处理器。处理器的执行按照配置文件的先后顺序依次执行,下一步执行默认以上一步的结果作为数据。
- 处理器包含默认值处理器valueProcess 、正则处理器 RegexProcess Spel表达式处理器SpelProcess、工具 方法处理器ToolProcess、和数据请求处理器ContentRequestProcess、字段处理器FieldProcess等。
- valueProcess 将字段设置一个指定的值,类似常量概念。
- RegexProcess 利用上下文抽取匹配的数据。上下文一般指的是上一部的操作、或者指定的变量、 如果没有上一步则为最开始获取传入url的内容。
- SpelProcess主要是针对当前上下文做一些运算,具体参考Spring的Spel文档。
- ToolProcess主要是针对当前上下文调用一些工具类的方法。工具类可以是自己的也可以是一些已有的(如apache commons 中常用得NumberUtils)
- ContentRequestProcess用于请求一些Ajax数据。(有些开源项目可以执行js如cobra,然后将修改反映到DOM树种。但个人觉得这样有点复杂化,毕竟要获取的数据源不是很多)。
ContentRequestProcess可能要依赖于其他一些处理 如预定义的处理或者一些字段的数据的获取。
- 每一个处理器的操作都会缓存到一个数据容器中DataContainer(HashMap的一个扩展)。
- FieldProcess字段处理器依次调用字段的处理器,并返回最后一个的处理器返回的值。
- Process的一个抽象方法是Object process(DataContainer dataContainer);
- 每一个Process都有对应的Setting对象。如RegexProcess对应的Setting对象是RegexSetting。Setting对应于配置文件中的相应元素,并最后装配成Extractor对象。
建议:将数据类型简化,尽量使用String类型 ,不要做过多的数据处理工作,把这部分工作留在抽取后进行。
今天就写到这里以后有时间和实际使用情况再补上!
分享到:
相关推荐
- **自定义数据交换格式**:企业内部可能有基于XML的自定义数据格式,BIRT提供了一个灵活的平台来处理这些数据。 7. **MHT文件**: 提到的“birt xml.mht”文件可能是包含了BIRT XML数据源的MHT(MHTML,...
学习基于XML的WEB开发,你需要掌握XML的语法、解析方式、数据验证以及其在各种WEB场景中的应用。通过实践,你可以创建出灵活、可维护的WEB应用程序,充分利用XML的强大功能。本教程将逐步引导你探索XML的世界,提升...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。本文将深入探讨四种主要的XML解析技术及其工具,并通过对比分析,帮助你选择适合项目需求的XML处理...
基于XML配置的JS(JavaScript)验证方式是将XML文件作为配置源,来定义和管理前端表单验证规则的一种技术。这种方式可以帮助开发者更加灵活地管理和维护表单验证逻辑,同时降低代码耦合度。 首先,我们来详细理解...
总之,XML解析器和构造器是处理XML文档不可或缺的工具,掌握它们的使用能够帮助我们更高效地进行数据交换和处理。无论是DOM还是SAX,选择合适的解析方式,结合XPath和XSLT等技术,都可以提升XML操作的灵活性和效率。...
总结来说,XML作为数据交换的通用格式,结合其相关的标准和技术,如XML Schema、XSLT和XPath,以及Java提供的处理工具,构建了一个强大且灵活的数据处理框架。无论是解析、验证、操作还是转换XML数据,都有成熟的...
本压缩包"xml解析工具-静态分析.rar"提供了一个方便的工具,用于对APP客户端进行完整性校验,特别强调了其简单易用的操作流程。 在XML解析过程中,主要涉及以下几个核心概念: 1. **XML文档结构**:XML文档由一...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在互联网上,尤其是在数据交换、配置文件和存储结构化信息方面。XML的设计目标是传输和存储数据,而不是显示数据,与HTML不同,HTML主要用于...
XML(Extensible Markup Language)是一种标记语言,常用于数据交换、配置存储以及文档结构化描述。在IT领域,XML因其自解释性、平台独立性和结构化的特性,被广泛应用于各种软件开发中。以下是对XML读取及解析相关...
使用DOMParser解析XML文档,首先需要创建一个DOMParser实例,然后调用其`parseFromString()`方法,传入XML字符串作为参数。例如: ```javascript let parser = new DOMParser(); let xmlString = "<root>...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件、文档存储等领域。在Java中,解析XML有多种方法,其中之一就是使用JDOM库。JDOM,全称Java Document Object Model,是...
这个解析器的独特之处在于它的简洁性和速度,这得益于其底层的C语言实现,为Ruby提供了一个轻量级且高性能的接口来解析XML数据。 XML(可扩展标记语言)是一种广泛应用的数据交换格式,常用于Web服务、配置文件和...
XML(eXtensible Markup...总之,Xerces-Java是一个强大的XML解析工具,对于任何涉及XML处理的Java项目都是不可或缺的。通过深入理解和实践,你可以掌握如何有效地利用Xerces解析和操作XML数据,提升你的Java开发技能。
- **Web服务**:SOAP(简单对象访问协议)基于XML,用于在Web服务之间交换结构化信息。 - **文档标记**:比如 ePub 和 DocBook 等电子书和文档标准使用XML来组织内容。 6. **XML解析器** 为了处理XML,我们需要...
"XML Edit"这款工具可能包含了以上所述的功能,旨在提供一个友好的界面,让用户在处理XML文件时能得心应手。它简化了XML文件的编辑过程,使得非编程背景的用户也能轻松理解和操作XML数据。通过使用这样的工具,用户...
"BOG_XML解析"可能指的是一个特定的项目或库,用于处理XML文件。 XML文件的结构基于元素(Element),每个元素都由开始标签、内容和结束标签组成。例如,`<book>`是开始标签,`</book>`是结束标签,它们之间的内容...
DOM将整个XML文档加载到内存中,形成一个树状结构,方便遍历和操作;SAX则是事件驱动的,逐行读取XML,适合处理大型文档,以节省内存。 在处理XML时,还需要注意编码问题,通常使用UTF-8编码以支持多种语言字符。...
XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计目标是简化数据的存储和...
动态生成图表首先需要一个图表库或工具,这里我们提及的是SWFChart,它是一个专门用于创建SWF图表的库。SWFChart允许开发者通过XML配置文件来定义图表的样式、数据以及行为。这样,即使在运行时,也可以轻松地更改...
运行该编辑器需要.NET Framework 3.0环境,这是由微软开发的一个应用程序框架,包含了运行许多基于.NET的应用程序所需的库和服务。安装.NET Framework 3.0后,才能确保XML文件数据表格编辑器能正常运行。 在压缩包...