woody 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
woody 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
woody 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !

软件简介

woody 是一款基于 Java 的 HTML 解析/提取器,用法非常类似 webmagic,是对其抽取模块的完全重写。

功能:

  • 多种结果数据类型(String, char, byte, short int, long, double, float, string[], Set, List,Data)
  • 支持用户之定义脚本处理函数(目前支持 Javascript 函数配置处理)
  • 支持 css、xpath 内核替换
  • 支持 filter 功能
  • 对 css、xpath 内核对象的缓存

一个完整的例子:

public class OsChinaBlog {

	public static void main(String[] args) throws Exception {
		Document doc = Jsoup.connect("http://www.oschina.net/news/43879/webmagic-0-3-0").timeout(60000)
				.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20100101 Firefox/23.0").get();
		String html = doc.html();
		OsChinaBlogModel model = AnnotationExtractor.me().process(html, OsChinaBlogModel.class);
		System.out.println(model.toJson());
	}

	public static class OsChinaBlogModel extends Model {

		public OsChinaBlogModel() {
			//use to reflect
		}

		@Inject
		@ComboExtract(value = { @ExtractBy(value = "h1.OSCTitle", type = ExprType.CSS),
				@ExtractBy(value = "//title/text()", type = ExprType.XPATH) }, op = OP.OR)
		public String title;

		@Inject
		@ExtractBy(value = "div.PubDate a[href~=http://my\\.oschina\\.net/]", type = ExprType.CSS)
		public String author;

		@Inject
		@ExtractBy(value = "发布于.\\s*(\\d+年\\d+月\\d+日)", type = ExprType.REGEX)
		public Date publishDate;

		@Inject
		@ComboExtract(value = {
				@ExtractBy(value = "div.PubDate", type = ExprType.CSS, setting = @Setting(outerHtml = true)),
				@ExtractBy(value = "(\\d+)评", type = ExprType.REGEX) }, op = OP.AND)
		public int commentNum;

		@Inject
		@ExtractBy(value = "span#p_favor_count", type = ExprType.CSS, setting = @Setting(function = @Function(value = "replace", args = {
				"+", "" })))
		public int collectNum;

		@Inject
		@ComboExtract(value = {
				@ExtractBy(value = "div[id=userComments]", type = ExprType.CSS, setting = @Setting(outerHtml = true)),
				@ExtractBy(value = "div.TextContent", type = ExprType.CSS) }, op = OP.AND, multi = true)
		public List commentContents;

		@Inject
		@ExtractBy(value = "div[id=toolbar_wrapper]", setting = @Setting(fliters = { "b", "span" }), type = ExprType.CSS, impl = Document.class)
		public String weibo;

	}
}
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
什么意思
05/19 16:35
回复
举报
更多评论
暂无内容
发表了博客
2016/05/18 22:36

linux正则

grep用法详解 grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同! 正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享下: 1基础正...

0
0
发表了博客
2015/12/21 09:35

grep用法详解 grep与正则表达式

正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享下: 1基础正则表达式 grep 工具,以前介绍过。 grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 -c 计...

0
15
发表于软件架构专区
2019/01/08 07:30

.NET Core 如何为项目提供高性能解决方案?

本系列,我们将探讨.NET Core 的一些好处,以及它如何为市场提供高性能解决方案,为传统.NET 开发人员和技术人员提供帮助。 正文 前言 随着.NET Core 2.0 在 2016 年首次发布,微软拥有了这个通用、模块化、跨平台开源项目的下一个主要版本。.NET Core 包含.NET Framework 当前版本中的许多 API,最初是为了实现下一代 ASP.NET 解决方案而创建。现在,它推动了许多其他场景的发展并成为其基础,包括物联网、云和下一代移动解决方...

0
0
发表了博客
2013/06/17 15:40

linux下的eclipse c/c++用root权限调试

今天遇到一个难缠的问题,我在ubuntu下用eclipse调试一个C程序,用到这个sched_setscheduler函数去设置进程的优先级,但是调试的时候发现在我自己的用户下不能调试,因为这个函数需要root权限,但用root打开eclipse后workspace会改到root下。 在网上找了半天方发终于找到了。 方法如下: 首先执行命令 sudo vi sudo 在最后一行添加 <youruser> ALL=(root) NOPASSWD:/usr/bin/gdb <youruser>为你的用户,例如我的 woody ALL=(roo...

2
4
发表了博客
2020/06/03 11:29

如何在各种文化背景下成功敏捷

7年前,我曾写过两篇著名的博文(和一本书)--《如何让你的文化有效》和《如何使您的文化与敏捷、看板和软件工艺一起工作》。在这篇博文中,你将学习到具体如何做到这点,及最新的建议和实践经验。文章的重点是如何在尊重东道国组织文化的同时,在文化泡泡中创造最大的成功。 如果你对发展组织文化感兴趣,请阅读《如何改变您的组织文化》一文。 **文化是一种局部现象** 首先要明白,在所有的组织中,文化是一种局部现象。有的组...

0
0
01/01 21:43

Kafka日志处理器 Python3版本实现

1. Kafka 日志处理器 ``` import json import logging from kafka import KafkaProducer class KafkaHandler(logging.Handler): def __init__(self, host_list, topic='corp_it_testing', tls=None): """ :param host_list: kafka 主机集群地址(ip:port) :param topic: kafka 主题设置 :param tls: """ logging.Handler.__init__(self) self.producer = KafkaProducer(bootstrap_servers=host_list, value_serialers=lambda v: ...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
18 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部