表格数据抽取目前是VS独有的,设计他的原因是发现很多网站的表格并不好提取,因为他们就是纯粹的表格,没有css样式,没有标签ID,没有特点信息。这个时候JSoup很难搞定,xpath实现起来也挺复杂的,对于xpath可能可以定位到数据,但也是需要写逻辑处理每行每列。

TableEvaluator专门设计用来解决此类考位置确定节点含义的场景的数据抽取。分如下步骤

TableParser

parse a table data from a document. 他会将一个表格解析成一个矩阵结构的数据,他不光支持tr/td模式的标准表格,还指出ul/li、div这类的假表格😄。具体的用法自己看看代码吧

       private String tableSelector;
        private String rowSelector;
        private String columnSelector;
        private Element tableElement;
        private String thSelector;
        private List<Element> tableHeader;

有这些参数可以设置,tableSelector是表格定位表达式,rowSelector是行定位表达式(默认是 “tr”),columnSelector是列定位表达式(默认是:“td”),tableElement是表格元素,如果你已经定位到表格元素了,那么就不需要表格定位表达式了。thSelector是表头定位表达式,对于列表形式的表格解析,表头信息代表着每个字段的含义,所以需要解析表头,然后和表格内容对应起来。tableHeader同样的,如果你已经得到了表头数据,则不需要在解析表头了。

注意,这些表达式都是SipSoup语法

TableEvaluator

这代表表格抽取器,他是一个模型,描述如何抽取表格的数据,将其转化为对象。他有四种形式,分别是ListTableEvaluator

、HorizontalPairTableEvaluator、VerticalPairTableEvaluator、CursorTableEvaluator。

ListTableEvaluator:列表类型的表格,存在表头,body部分每一列对应一个表头,列偏移代表当前列的语义

HorizontalPairTableEvaluator:水平类型表格,特点是左右互为key-value

VerticalPairTableEvaluator:垂直类型表格,特点是上下互为key-value

CursorTableEvaluator:基于游标遍历的扩展抽取,当前用得很少,感觉应用场景不多

所有的抽取器都有如下方法:com.virjar.vscrawler.core.selector.table.TableEvaluator#evaluate、com.virjar.vscrawler.core.selector.table.TableEvaluator#evaluateToMap、com.virjar.vscrawler.core.selector.table.TableEvaluator#evaluateToJson

results matching ""

    No results matching ""