抽取页面内容

gecco的内容抽取都是直接映射到java bean的属性中,利用注解可以方便的注入页面中的各种信息包括html页面内容、Ajax请求、javascript变量、request信息等

一、Html页面内容抽取

@HtmlField

html属性定义,表示该属性是通过html查找解析,在html的渲染器下使用

  • cssPath:jquery风格的元素选择器,使用jsoup实现。jsoup在分析html方面提供了极大的便利。计划实现xpath风格的元素选择器。

@Href

表示该字段是一个链接类型的元素,jsoup会默认获取元素的href属性值。属性必须是String类型。

  • value:默认获取href属性值,可以多选,按顺序查找
  • click:表示是否点击打开,继续让爬虫抓取

@Image

表示该字段是一个图片类型的元素,jsoup会默认获取元素的src属性值。属性必须是String类型。

  • value:默认获取src属性值,可以多选,按顺序查找
  • download:表示是否需要将图片下载到本地(暂未实现)

@Attr

获取html元素的attribute。属性支持java基本类型的自动转换。

  • value:表示属性名称

@Text

获取元素的text或者owntext。属性支持java基本类型的自动转换。

  • own:是否获取owntext,默认为是

@Html

默认类型,可以不写,获取html元素的整个节点内容。属性必须是String类型。

二、页面中的Ajax请求

现在的页面通常都会有很多ajax请求,很多主题爬虫在针对这种请求一般是使用htmlunit等类似的渲染引擎,将页面所有的信息都渲染完毕后交给爬虫处理,gecco可以通过实现自定义的downloader类来实现类似的方式。不过该方式会对整个页面都进行渲染,效率较低,很多时候你可能只需要某一个ajax请求就可以了。gecco实现了模拟ajax请求的定义,如:

@Ajax(url="http://p.3.cn/prices/mgets?skuIds=J_{code}")
private JDPrice price;

上述代码通过ajax方式获得jd商品的价格,{code}表示request中的属性值,使用[...]可以引用已经解析出来的html页面中的属性值。全部代码可以参考源码中的src/test/java/com/geccocrawler/gecco/demo/ajax

三、json格式内容的抽取

有ajax请求涉及到json格式的内容抽取,gecco除了支持html的内容抽取,同时也支持json内容的抽取

@JSONPath

使用fastjson的jsonpath,jsonpath类似是一种对象查询语言,能方便的查询json中个字段的值,详情请查看fastjson-jsonpath

@JSONPath("$.p[0]")
private float price;

四、页面中的javascript变量抽取

gecco支持抽取页面中的javascript全局变量的内容抽取。

@JSVar

  • var:表示变量名
  • jsonpath:如果变量是json格式的数据,通过定义jsonpath抽取需要的内容,如果不是json格式的数据可以不填

五、request信息的注入

@Request

将httpRequest信息注入到java bean中。

@RequestParameter

将url中定义的变量注入到java bean中。

results matching ""

    No results matching ""