1. 从其官网:http://web-harvest.sourceforge.net/上下载所需工具并把其工程部署到eclipse里面这自不必说,我下载的是1.0版本的。
2. 看看并运行一下其自带的例子,这个步骤还是比较重要的,不过由于任务较紧,所以我只看了其中几个而已。
3. 开始我的工作:
a. 这里我要分析并抓取的页面:http://www.ctsgz.cn/tpl/index/search_more_label.do?xxk_name=%E6%B5%B7%E5%8D%97,我要的是里面前两个表里面的数据,
要先仔细分析一下页面的结构,看看怎样抓取比较好。
b. 从例子可以看出要选取其里面的数据应该是要在配置文件里面进行配置的而且要用到xpath的知识,不熟,所以还要进行xpath相关知识的学习(我也是临时
抱佛脚,看了一下),然后对着例子来看,经过多翻测试终于得出下面的配置,可以选出第一个表格里面的所有tr,并且返回的是一个list:
c. 然后再根据这个list在下面进行循环读取并写入文件:
2. 看看并运行一下其自带的例子,这个步骤还是比较重要的,不过由于任务较紧,所以我只看了其中几个而已。
3. 开始我的工作:
a. 这里我要分析并抓取的页面:http://www.ctsgz.cn/tpl/index/search_more_label.do?xxk_name=%E6%B5%B7%E5%8D%97,我要的是里面前两个表里面的数据,
要先仔细分析一下页面的结构,看看怎样抓取比较好。
b. 从例子可以看出要选取其里面的数据应该是要在配置文件里面进行配置的而且要用到xpath的知识,不熟,所以还要进行xpath相关知识的学习(我也是临时
抱佛脚,看了一下),然后对着例子来看,经过多翻测试终于得出下面的配置,可以选出第一个表格里面的所有tr,并且返回的是一个list:
<var-def name="trlist">
<xpath expression="//table[@background='../images/dotline.gif'][1]/tbody/*[1]/following-sibling::*"> //xpath的语法要稍微看一下才行
<html-to-xml>
<http url="${targetUrl}"/>
</html-to-xml>
</xpath>
</var-def>
c. 然后再根据这个list在下面进行循环读取并写入文件:
<file action="write" path="test_ctsgz_${surf_name}.xml">
<template>
<![CDATA[ <root> ]]>
</template>
<loop item="item" index="i">
<list>
<var name="trlist"/>
</list>
<body>
<xquery>
<xq-param name="item">
<var name="item"/>
</xq-param>
<xq-expression><![CDATA[
declare variable $item as node() external;
let $order := data($item//td[1])
let $pathName := data($item//td[2])
let $startDate := data($item//td[3])
let $days := data($item//td[4])
let $travelTools := data($item//td[5])
let $price := data($item//td[6])
return
<city>
<order>{data($order)}</order>
<pathName>{data($pathName)}</pathName>
<startDate>{data($startDate)}</startDate>
<days>{data($days)}</days>
<travelTools>{data($travelTools)}</travelTools>
<price>{data($price)}</price>
</city>
]]></xq-expression>
</xquery>
</body>
</loop>
<![CDATA[ </root> ]]>
</file>