基于web-webhavrest抓取百度搜寻结果
由于公司业务需要,需要做一个关键词信息抓取程序,就利用web-webharvest做了一个抓取程序。
java程序:
import java.io.IOException;
import org.webharvest.definition.ScraperConfiguration;
import org.webharvest.runtime.Scraper;
public class BaiduQ {
public static void main(String[] args) throws IOException {
ScraperConfiguration config = new ScraperConfiguration("E:/webharvest/baiduQ.xml");
Scraper scraper = new Scraper(config, "E:/webharvest");
String sd = "玩具";
scraper.addVariableToContext("baiduURL", new String("http://www.baidu.com/s?wd="+sd));//设置查询地址
scraper.addVariableToContext("fileName", new String(sd));//设置查询结果保存文件
scraper.setDebug(true);
scraper.execute();
}
}
对应baiduQ.xml:
<config charset="gbk">
<!-- 页面爬取开始,按照关键词:来搜索 -->
<var-def name="start" id="startpage">
<!--获得类中传入连接地址-->
<var-def name="baiduURL" overwrite="false"></var-def>
<!--获得类中传入存储文件名-->
<var-def name="fileName" overwrite="false"></var-def>
<html-to-xml>
<http url="${baiduURL}"/>
</html-to-xml>
</var-def>
<!-- 获取网站列表 -->
<var-def name="urlList" id="urlList">
<xpath expression="//table[@class='result']">
<var name="start"/>
</xpath>
</var-def>
<!-- 循环 urlList ,并把结果写入到XML文件中 -->
<file action="write" path="${fileName}.xml" charset="utf-8">
<![CDATA[ <catalog> ]]>
<loop item="item" index="i">
<list><var name="urlList"/></list>
<body>
<xquery>
<xq-param name="item" type="node()"><var name="item"/></xq-param>
<xq-expression><![CDATA[
declare variable $item as node() external;
let $name := data($item//tr/td/a/font)
let $url := data($item//tr/td/a[1]/@href)
return
<website>
<name>{normalize-space($name)}</name>
<url>{normalize-space($url)}</url>
</website>
]]></xq-expression>
</xquery>
</body>
</loop>
<![CDATA[ </catalog> ]]>
</file>
</config>
该程序运行后是把结果存入xml中,基本解决了抓取的问题。