13 个版本

0.1.93 2021 年 3 月 6 日
0.1.92 2021 年 3 月 6 日
0.1.91 2021 年 1 月 21 日

#1995解析器实现

每月 34 次下载

MIT/Apache

49KB
1K SLoC

Capricorn

根据配置解析 HTML。

Capricorn 是一个支持递归和自定义执行顺序的 HTML 解析库。

Version info Downloads docs example branch parameter dependency status

默认执行顺序

vec![String::from("selects"),
    String::from("each"),
    String::from("select_params"),
    String::from("nodes"),
    String::from("has"),
    String::from("contains")];
    
selects > each > (one or all or fields) > ... text_attr_html > (text or attr or html);
selects > select_params > selects > ... text_attr_html > (text or attr or html);
selects > nodes > has > contains > text_attr_html > (text or attr or html);

支持

Capricorn 支持 示例 val 类型
选择元素 字段名
  选择
      - element_name
字符串
选择类 字段名
  选择
      - .class_name
字符串
选择类元素 字段名
  选择
      - .class_name
      - element_name
字符串
第一个 字段名
  选择
      - element_name
  节点
      first: true
字符串
最后一个 字段名
  选择
      - element_name
  节点
      last: true
字符串
eq 字段名
  选择
      - element_name
  节点
      eq: 0
字符串
父节点 字段名
  选择
      - element_name
  节点
      parent: true
字符串
子节点 字段名
  选择
      - element_name
  节点
      children: true
字符串
前兄弟节点 字段名
  选择
      - element_name
  节点
      prev_sibling: true
字符串
后兄弟节点 字段名
  选择
      - element_name
  节点
      next_sibling: true
字符串
has_class 字段名
  选择
      - element_name
  has
      class: class_name
字符串
has_attr 字段名
  选择
      - element_name
  has
      attr: attr_name
字符串
每一个 字段名
  选择
      - element_name
  each
      one
          选择
              - .class_name
          ...
字符串
每一个全部 字段名
  选择
      - element_name
  each
      all
          选择
              - .class_name
          ...
数组
每一个字段 字段名
  选择
      - element_name
  each
      fields
        field_name
          选择
              - .class_name
          ...
        field_name1
          选择
              - .class_name
          ...
映射
选择参数 字段名
  选择
      - element_name
  select_params
      选择
          - .class_name
      ...
...
文本 字段名
  选择
      - element_name
  text_attr_html
      text: true
字符串
属性 字段名
  选择
      - element_name
  text_attr_html
      attr: true
字符串
HTML 字段名
  选择
      - element_name
  text_attr_html
      html: true
字符串
文本包含 字段名
  选择
      - element_name
  contains
      contains
          text
              - test
字符串
文本不包含 字段名
  选择
      - element_name
  contains
      not_contains
          text
              - test
字符串
HTML 包含 字段名
  选择
      - element_name
  contains
      contains
          html
              - test
字符串
HTML 不包含 字段名
  选择
      - element_name
  contains
      not_contains
          html
              - test
字符串
执行顺序 字段名
  exec_order
      - selects
      - has
      - nodes
  选择
      - element_name
  has
      class: class_name
  节点
      first: true
字符串
数据格式分割 字段名
  选择
      - element_name
  data_format
      分割
          - { key: str }
数组
数据格式分割 字段名
  选择
      - element_name
  data_format
      分割
          - { key: str, index: 0 }
字符串
数据格式替换 字段名
  选择
      - element_name
  data_format
      替换
          - str
字符串
数据格式删除 字段名
  选择
      - element_name
  data_format
      删除
          - str
字符串
数据格式查找 字段名
  选择
      - element_name
  data_format
      查找
        - regex
字符串
数据格式查找迭代 字段名
  选择
      - element_name
  data_format
      查找迭代
        - regex
数组
多版本正则匹配错误 regexes_match_parse_html
    - regex: regex
      版本: 1
      错误: err_msg
错误
多版本正则匹配字段 regexes_match_parse_html
    - regex: regex
      版本: 1
      fields
        field_name
          选择
          ...
        field_name
          选择
          ...
映射

解析HTML代码,更多...

let yml = read_file("./test_html/test.yml").unwrap();
let params: parse::HashMapSelectParams = serde_yaml::from_str(&yml).unwrap();
let html = read_file("./test_html/test.html").unwrap();
let r = parse::parse_html(&params, &html);

多版本正则匹配解析HTML代码,更多...

let yml = read_file("./test_html/regexes_match_parse_html.yml").unwrap();
let v:  match_html::MatchHtmlVec = serde_yaml::from_str(&yml).unwrap();
let html = read_file("./test_html/test.html").unwrap();
let r =  v.regexes_match_parse_html(html)?;

依赖项

~9–18MB
~235K SLoC