`

web-harvest中的xpath抽取规则配置实例

    博客分类:
  • java
阅读更多
文章来源:http://blog.sina.com.cn/s/blog_87e88aac01010zf1.html
虽说很早以前听说过web-harvest 这个东西,但是没有真正的花太多的功夫去研究它,但在最近静下心来去研究一番,才觉得这个东西确实是很方便和强大!大概而言,就是:

    1.构建抽取规则简单方便强大

     2.可以通过一个xml文件进行规则和抽取逻辑的配置

     3.可以在配置文件中进行相关的逻辑判断,很好的支持java语言,当然这要归功于beanshell

     4.最大的方便在于,写好程序后,基本就不用修改,每次写一个配置文件就行了!

具体是怎么做的了,这需要通过在java程序中进行调用,而不能依靠web-harvest本身的GUI界面来进行,但官方的文档就简单的提供了几行代码,剩下的就是省略号了,扔下一大堆东西需要自己去摸索,不过还好啦,通过阅读源码和程序的说明,基本上弄懂了,如何在程序层面利用web- harvest去抽取信息,给个简单的示例,大家就知道这个web-harvest就有多么的方便了!不算是一个完整的java程序,但是一个开发的基本的流程,中间有些变量需要改变

private ScraperConfiguration config;
private Scraper scraper;

config = new ScraperConfiguration(context.getRuleConfig());//配置文件的路径
scraper = new Scraper(config, context.getWorkDir());//工作的目录
scraper.addVariableToContext("pagecontent",new String(this.pageContent));//通过程序的方式,将java变量赋值给配置文件中的变量,呵呵,方便吧!注意要new Sting()下
scraper.addVariableToContext("linkurl",new String(""));
scraper.setDebug(false);
scraper.execute();//真正的开始执行

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!-- config for www.qianzhihe.com.cn -->
<config charset="gb2312">
<!-- raw content of page define in java -->

<!-- define linkurl 一个变量,通过java程序的方式赋值-->
<var name="linkurl"></var>

<!-- to decide link is product or not 下面使用了强大的脚本beanshell语言,实际就是java语言,-->
<var-def name="isproductlink">
<script return="islinkproduct"><![CDATA[
   islinkproduct=linkurl.toString().matches("http://www.qianzhihe.com.cn/Product/[0-9]+.htm");
]]></script>
</var-def>

<!-- to decide link is pagelist or not -->
<var-def name="isproductlist">
<script return="islistproduct"><![CDATA[
   islistproduct=false;
   if(linkurl.toString().contains("tsort.asp") || linkurl.toString().contains("pinpai.asp")){
    islistproduct=true;
   }
]]></script>
</var-def>

<!-- convert to xml 注意其中的变量pagecontent,也是通过java的方式赋值过来的-->
<var-def name="xmlcontent">
<html-to-xml specialentities="false">
<var name="pagecontent"></var>
</html-to-xml>
</var-def>

<!-- to get product title 解释下xpath语法吧,这个是获取带有属性名class并且其属性值是vtitle的标签为td中的内容 -->
<empty>
<var-def name="name">
<xpath expression="data(//td[@class='vtitle'])">
<var name="xmlcontent"></var>
</xpath>
</var-def>
</empty>

<!-- to get product price 这个语法很好用,就是相当于获取一个数组中的第几个元素了,从所有拥有属性名为color的并且属性值为#D03430的标签名为font的集合中,选取第二个元素的内容 -->
<empty>
<var-def name="rawprice">
<xpath expression="data((//font[@color='#D03430'])[2])">
<var name="xmlcontent"></var>
</xpath>
</var-def>
</empty>

<!-- to get clean price -->
<empty>
<var-def name="price">
<script return="cleanprice"><![CDATA[
   cleanprice=rawprice.toString().replaceAll("¥","").replaceAll(",","");
]]></script>
</var-def>
</empty>

<!-- to get product sort -->
<empty>
<var-def name="rawsort">
<xpath expression="data(//td[@class='sort'])">
<var name="xmlcontent"></var>
</xpath>
</var-def>
</empty>

<!-- to get clean sort -->
<empty>
<var-def name="sort">
<script return="cleansort"><![CDATA[
   cleansort=rawsort.toString().replaceAll(">>","|").replaceAll(",","");
]]></script>
</var-def>
</empty>

<!-- to get product digest -->
<empty>
<var-def name="digest">
<xpath expression="data(//div[@id='tab1_1'])">
<var name="xmlcontent"></var>
</xpath>
</var-def>
</empty>

<!-- to get page body -->
<empty>
<var-def name="body">
<xpath expression="data(//body)">
<var name="xmlcontent"></var>
</xpath>
</var-def>
</empty>
</config>

至于xpath的详细语法,脚本语言的编写还是请各位去仔细查下资料看看,一下子也很难讲述完整!可以参考:www.w3school.com.cn

到后来怎么获取数据呢?请看下面的简单代码:

就是通过scraper去获取配置文件中的变量,并转化为java中的变量类型就行可以了

Variable title = (Variable) scraper.getContext().get("name");
   return title.toString();

在使用完一个scraper之后,要记得释放一些变量,这个是通过scraper.dispose()方法来释放一些变量,要不然会存在一些问题,使用的内存越来越多,最后outofmemory,呵呵!

对于中文的支持也不错,自己在使用过程中没有遇到过乱码,关键是要合理选择好字符集!
分享到:
评论

相关推荐

    [Web-Harvest数据采集之一]Web-Harvest基础-配置文件分析源码

    [Web-Harvest数据采集之一]Web-Harvest基础-配置文件分析源码

    [Web-Harvest数据采集之二]Web-Harvest基础-抓取java代码分析

    在这个主题中,我们将深入探讨Web-Harvest的基础知识,特别是如何利用它来抓取Java代码进行分析。在进行数据采集时,理解配置文件、抓取类以及所需依赖的JAR包是至关重要的。 首先,让我们从配置文件开始。Web-...

    web-harvest解析及源文件

    Web-Harvest是一种开源的、基于Java的网页数据提取工具,它允许用户通过编写XML配置文件来定义数据抽取规则,从而实现对网页内容的自动化处理和分析。这个压缩包文件包含了一些与Web-Harvest相关的学习资料和源文件...

    web-Harvest帮助手册

    web-Harvest是一款强大的、可扩展的Web数据提取工具,它允许用户通过编写简单的配置脚本来抓取和处理网页上的信息。这款开源工具使用Java语言开发,适用于各种操作系统,并且支持XPath和XQuery等技术,使得数据提取...

    Web-Harvest学习笔记.doc

    Web-Harvest是一个用于Web数据挖掘的开源工具,它的核心功能是通过自定义的XML配置文件来抓取和处理目标网页中的数据。该工具支持多种技术,如XPath、XQuery和正则表达式,用于从HTML文档中提取所需信息。Web-...

    Web-Harvest手册

    配置文件中的XML元素是Web-Harvest工作的基础。`config`元素是配置文件的根元素,它包含了所有其他的处理指令。`empty`元素则表示处理结果为空,`text`用于强制将内容转换为文本格式。`var-def`用于定义变量,而`var...

    试用Web-Harvest 使用手册

    Web-Harvest是一款强大的、开源的Web数据提取工具,它允许用户通过简单的配置文件定义规则来抓取网页内容。本手册将深入探讨如何试用Web-Harvest,理解其基本概念和核心功能,以便于在实际项目中灵活应用。 **一、...

    Web-Harvest学习笔记

    Web-Harvest学习笔记,主要是异常类的使用,标签的使用,scraper的源码等操作

    Laravel开发-laravel-harvest

    $projects = $harvest-&gt;projects()-&gt;all(); // 进行其他操作... } ``` 此外,`laravel-harvest` 可能还提供了额外的便利方法,如模型映射、数据转换等,以适应 Laravel 的 Eloquent ORM,使得与数据库的交互更加...

    Python库 | pytest-harvest-1.7.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:pytest-harvest-1.7.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Laravel开发-harvest-api

    在本文中,我们将深入探讨如何使用Laravel框架开发与Harvest API集成的应用程序。Harvest是一款流行的项目管理和时间跟踪工具,而Laravel是PHP社区中最受欢迎的Web开发框架之一。结合两者,我们可以创建高效、优雅的...

    java开源软件项目网络爬虫-webharvest

    The main goal behind Web-Harvest is to empower the usage of already existing extraction technologies. Its purpose is not to propose a new method, but to provide a way to easily use and combine the ...

    web-harvest

    web harvest的jar包 提供一个xml编辑环境

    Laravel开发-laravel-harvest .zip

    例如,`$harvest = App\Harvest::find(1)`可以获取ID为1的harvest数据,而`$harvest-&gt;save()`则可以保存模型的更改。 11. **Blade 模板**: Blade模板允许在视图中混合PHP代码,提供条件语句(@if, @else, @endif...

    基于Nutch的Web网站定向采集系统

    **Web-Harvest** 则是一款轻量级的Web抓取工具,它允许用户指定一个或多个网页作为抓取的起点,并通过定义规则来抽取特定的内容片段。Web-Harvest 使用XPath表达式来指定需要抓取的数据位置,生成XML文档作为输出...

    alfred-harvest, 在收获过程中,用于跟踪时间的Alfred工作流.zip

    alfred-harvest, 在收获过程中,用于跟踪时间的Alfred工作流 ,,workflow,workflow,workflow,workflow 。让 帮你追踪时间。 这里工作流使你可以完全访问你的收获时间跟踪:查看今天的计时器启动/停止计时器查看...

    WebList-Harvest:这是EECS433课程项目

    从压缩包文件名称“WebList-Harvest-master”可以看出,这是一个开源项目,包含了项目的主分支源代码。用户可以下载并研究其源码,理解并学习如何实现这样的网络数据收获工具。 总结来说,WebList-Harvest项目是...

    LiuLingZ#review-and-harvest#mybatis的Mapper自动映射原理1

    1、导言 2、解析 3、总结

Global site tag (gtag.js) - Google Analytics