正式推荐我的一个开源项目,可以处理网页抓取,语法分析

autogrammerspider项目,今天在[www.taobao.com]上面测试成功了,这个项目可以大大缓解你抓取网页时,分析网页的痛苦。

目前在功能,效率上面虽然还有很大的提升空间,但是基本运行已经问题不大。我今天正式介绍这个项目,希望各位有兴趣的话可以用用,提出宝贵意见,如果真的需要什么功能的话也可以告诉我,我会尽快完善。

这个东西的使用如下,

首先配置特征文件,放在resource, autospider下面,

特征文件的内容如下:

在这个特征文件里面有3个地方需要注意,

一个是最上面的namespace,这个地方是你使用时候的一个名字标记,这里为tb-category。

一个是handler,这是你自己定义的处理函数,当完全匹配到特征的时候就会调用这个函数。

还有一个是<_list>标签,例如你要匹配的是 <div someattr> <a someattr> <a someattr> .... </div> 这里由于你本身也不知道,不关心里面有几个<a>标签,你就可以加入一个<_list>,表示它同级别前面的兄弟元素无限重复。

那么handler是什么样子呢?

其中,第一个参数会贯穿一个整个匹配过程,无论你要匹配多少种handler,多少次handler,只要是一篇文章的匹配,这个ExecuteParam就是同一个。

第二个参数是植入了handler的元素,第三个参数是符合整个特征的元素,在这里也就分别是a标签,以及它父级的父级的<dd>元素标签。

下面是整个测试代码:

这里你需要配置一个bean,然后用createExecutor("传入配置文件里面的namespace")即可获得一个执行上下文,用来分析文本,下面是bean的配置,你自己new一个对象然后调用init方法也可以:

运行结果:

这里只是匹配到了一组特征值,程序支持多组匹配,如果有多个满足特征的html元素,会匹配多次。

最后就是开源软件的位置了,包括测试项目的git代码在这里:

http://git.oschina.net/notebook

由于我目前还没有上传至maven仓库,我在published项目里面放了2个jar包。

简单说说原理:

本文的功能由 autogrammerspider直接支持,autogrammer则是更下一级的支持,它是一个可自定义语法,可自定义处理流程,自定义错误处理等等的语法分析器(其实由于它完全是自己写的,甚至可以不符合任何语法规则,所以说是状态机生成器可能更为贴切),它的作用远不止这个文章里面提到的功能,将来我还会以它为基础完成其他的项目。

autogrammerspider本身是一个编译器,它首先有一套内置的规则文法,然后会用这个编译器去变编译用户配置的配置文件,这个编译的结果是另一个编译器。

用户会用这第二个编译器去编译文本,这个编译器的逻辑是这样的,首先它只能识别用户在配置文件中定义的属性和tag,然后他会试图按照配置文件去读取,一旦发现读取失败则会抛弃之前失败的文本,继续从头匹配,一旦整个匹配成功则调用handler,然后如此反复一直匹配到文本结束为止。

最后的最后附上几个需要完善的地方

首先目前尚不支持<a>ww</a>这种xml内部 text的匹配,只支持标签和属性的匹配。

还有例如上面这个匹配规则,如果是

<div class="J_CatHook cathook" class="c-2"> <a class="c-3"> something </a></div>

这样是会匹配成功的,因为class="c-2"是在特征里面不存在的,会被忽略。但是

<div class="J_CatHook cathook" class="c-3"> <a class="c-3"> something </a></div>

会匹配失败,因为class="c-3"在特征里面存在,无法被忽略。

其他缺陷肯定还有,但目前作为第一个版本我认为尚无必要考虑如此多的情况,如果各位使用中有什么需要可以告诉我,我会更新。

时间: 2024-10-11 12:52:59

正式推荐我的一个开源项目,可以处理网页抓取,语法分析的相关文章

正式推荐我的一个开源项目2-自定义编译器

在项目里面有时有这样的场景,我们需要一个权限表来控制权限,当满足权限表条件时,阻止用户操作并返回错误信息,表的结构类似: 这时有一种传统方式是,我们用mybatis之类的工具,写一段sql,每次用这段sql校验权限: SELECT * from permission_test where `condition1` = #{condition1} and `condition2` = #{condition2} 另外一种方式是,我们将table编译为一段可执行代码,然后每次执行这段代码,这段代码类

一个极其简洁的Python网页抓取程序

paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境 #---混合编程的类型 1.代码inline 方式 2.使用库/api  解析方式. #----配置resin 支持php resin4默认自动支持php.. 也能手动配置了.web.xml加php的servlet解析..参考Quercus让你的PHP开心在Servlet容器奔跑 #----配置 php.ini路线 运行t.php,,看见 Configuration File (php.ini) Path =>

一个极其简洁的Python网页抓取程序,自己主动从雅虎財经抓取股票数据

本程序使用Python 2.7.6编写,扩展了Python自带的HTMLParser,自己主动依据预设的股票代码列表,从Yahoo Finance抓取列表中的数据日期.股票名称.实时报价.当日变化率.当日最低价.当日最高价. 因为Yahoo Finance的股票页面中的数值都有对应id. 比如纳斯达克100指数ETF(QQQ)http://finance.yahoo.com/q?s=qqq 当中实时报价的HTML标记为 <span id="yfs_l84_qqq">87.4

如何参与一个开源项目!

1.首先在github上注册一个自己的账号 2.然后在左上部分搜索一个开源项目,比如说我的项目syj-ratelimit 3.进入项目之后,单击右上角的fork按钮,github就会在你的帐户下fork一个同样的项目. 4.此时点击右上角自己的头像,可以看到一个your repositories,点击进入就可以看到刚才的那个项目了 5.现在你就可以在这个项目里取发挥你的个人才智进行修改bug.开发新功能等各种方式的贡献了 6.当你贡献完毕后就可以把你的贡献推荐给这个项目的开发者了.再次打开git

www808888webcom基金的一个开源项目19908836661也是apache基金的一个开源

Flume也是apache基金的一个开源项目,由cloudera公司开发的一款分布式.高可靠.高可用的日志传输工具.其以agent为一个单位,agent由source.channel和sink构成.一个agent最少由一个source.channel和sink构成,数量可以自由组合 Source主要用来收集源数据,并对源数据进行反序列化.Source在读取数据文件时,会遍历日志文件中的每一行,并把这一行封装在一个event当中,一个event包含一个header和一个body,header是一个

一个实用的C#网页抓取类代码分享

一个实用的C# 网页抓取类 模拟蜘蛛,类中定义了超多的C#采集文章.网页抓取文章的基础技巧,下面分享代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using Sys

一个小型的网页抓取系统的架构设计

一个小型的网页抓取系统的架构设计 网页抓取服务是互联网中的常用服务,在搜索引擎中spider(网页抓取爬虫)是必需的核心服务.搜索引擎的衡量指标"多.快.准.新"四个指标中,多.快.新都是对spider的要求.搜索引擎公司比如google.baidu都维护者自己负责的spider系统.当然他们的系统很复杂,在这里我们介绍一个小型的网页抓取系统的架构,目标是快速的抓取某个或者几个指定的网站的数据,它的作用有很多,比如做竞品分析,还有其他不可告人的J. 下面这个小型的网页抓取系统,分成下面

如何熟悉一个开源项目?

参考来源: http://www.lai18.com/content/436209.html 你有个任务,需要用到某个开源项目:或者老大交代你一个事情,让你去了解某个东西.怎么下手呢?如何开始呢?我的习惯是这样: 1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的.功能.基本使用有个大概的了解. 2.阅读项目的文档,重点关注类似Getting started.Example之类的文档,从中学习如何下载.安装.甚至基本使用该项目所需

怎样在Github参与一个开源项目

转载:http://www.csdn.net/article/2014-04-14/2819293-Contributing-to-Open-Source-on-GitHub 最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Github开源项目,只能说你开源了