WebHavrest使用分享(一)

本文介绍了使用WebHarvest进行网页爬取的方法,包括下载页面、解析内容等基本操作,并提供了一个具体的配置文件示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要使用爬虫这个东西,所以我研究了一下子这个东西。
WebHarvest是个挺强大的爬虫,主要不是在Java代码那块使用,而是需要写脚本。
现在对WebHarvest这个配置的语法也不是很熟,只是写写使用经验。

外话:虽然我很烦写脚本,不过用着用着,我也觉得脚本的好处,发现脚本粘合性用在项目中也是很不错的。
:D

可以到www.webharvest.org网上下载jar包。
其中还有一个方便调试的脚步本的工具:
[img]http://dl.iteye.com/upload/attachment/193480/c1b95330-a669-3c8b-ae9b-4788baa349bc.jpg[/img]
下载这个文件,可以双击,也可以使用java -jar 命令打开。
软件如下:

[img]http://dl.iteye.com/upload/attachment/193482/a270ba96-ce92-3bd7-a62f-f4b3596ad972.jpg[/img]

也可以使用代码执行脚本:

//输入配置文件名
String scriptFile = "c:/mumu/tmp/webharvest/test2.xml";
//输入内容的存放文件夹路径
String outDirectory = "c:/mumu/tmp/webharvest";
ScraperConfiguration config = new ScraperConfiguration(scriptFile);
Scraper scraper = new Scraper(config, outDirectory);
scraper.setDebug(true);

long startTime = System.currentTimeMillis();
scraper.execute();
System.out.println("time elapsed: " + (System.currentTimeMillis() - startTime));


现在开始编写配置文件:

<?xml version="1.0" encoding="utf-8"?>

<config charset="utf-8">
  <var-def name="start">
  <html-to-xml>
   <http url="http://www.tianya.cn/bbs/index.shtml" charset="utf-8" />
  </html-to-xml>
  </var-def>
  <var-def name="ulList">
  <xpath expression="//div[@class='bankuai_list']">
   <var name="start" />
  </xpath>
  </var-def>
  <file action="write" path="tianya/siteboards.xml" charset="utf-8">
  <![CDATA[ <site> ]]>
  <loop item="item" index="i">
  <list><var name="ulList"/></list>
  <body>
  <xquery>
  <xq-param name="item">
  <var name="item"/>
  </xq-param>
  <xq-expression><![CDATA[
  declare variable $item as node() external;
<board boardname="{normalize-space(data($item//h3/text()))}" boardurl="">
  {
  for $row in $item//li return
  <board boardname="{normalize-space(data($row//a/text()))}" boardurl="{normalize-space(data($row/a/@href))}" />
  }
  </board>
  ]]></xq-expression>
  </xquery>
  </body>
  </loop>
  <![CDATA[ </site> ]]>
  </file>
</config>


输出结果我就不打印出来了,这个脚本例子是网上的。

先简单地说一个这个配置文件的写法
<var-def name="a">abc</var-def>
这里定义了一个a 变量标签的内容就是a的值。
现在a的值就是abc。

然而如果我现在需要爬baidu的页面,就需要先将http://www.baidu.com这个页面给下载下来先。
可以使用标签
<http url="www.baidu.com" charset="utf-8" />
这个标签将代码返回下载下来所有的页面代码,此时需要有一个变量去存起来,可以使用

<var-def name="baiduall">
<http url="www.baidu.com" charset="utf-8" />
</var-def>

需要抓内容的必须将html转成xml,这样可以方便以DOM 的方式去定位信息内容。
现在可以使<html to xml标签.


<var-def name="baiduall">
<http url="www.baidu.com" charset="utf-8" />
</var-def>
<var-def name="baiduxml">
<html-to-xml>
<var name="baiduall" />
</html-to-xml>
</var-def>


上边的代码先使用<var标签去引用这baiduall变量。再使用<html-to-xml>标签处理
然后用baiduxml变量存放转成xml后的内容。
这里只是为了演示这个功能,其实可以简化成如下代码:


<var-def name="baiduxml">
<html-to-xml>
<http url="www.baidu.com" charset="utf-8" />
</html-to-xml>
</var-def>

这代码与上边代码意义相同。

先在这里介绍最简单的用法,时间关系,我会日后与大家分享更多的功能方式讨论。
以后再讨论:
包括使用XPath定位与用js处理代码,<file标签输出到文件中,或是将数据在转到java对象中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值