|
本帖最后由 123456ytr 于 2018-11-18 18:02 编辑
git地址:https://github.com/1694439208/gumbo-Elss
使用易语言这么久了没有找到任何一个好用易用的html解析库 直到遇上了 Gumbo 参考了css选择器和xpath选择器语法,结合了两种方便之处
- 语法组成:指令
- 3大基本语法:标签名 .class值 #id值
- 多条指令使用语法:指令1 > 指令2 > 指令3 > ...
- 基本语法规范:
- ----------------------------------------------------
- 字符串和属性使用单引号或者双引号引起来
- ----------------------------------------------------
- 基本函数:
- ----------------------------------------------------
- find(属性,内容) 为查找属性值为内容的标签
- fuzzyfind(属性,内容) 为查找属性值包含内容的标签
- tojson(json节点名称,提取的节点名称,生成json字段别名,提取的属性)
- tojson将来可以处理复杂嵌套,目前只支持一层对象,,多个属性,例如:
- {
- "test":[
- {
- "href":"www.baidu.com"
- },
- {
- "href":"www.baidu.com"
- }
- ]
- }
- //将来会根据需求增加一些api
- 参数2内置属性对应:
- this => 自身节点
- 如不是上述name则为表达式,例如:
- div > .info:tojson(NodeList,div>a,link,href)
- 上述表达式 选取div节点后class为info的节点并且提取此节点下的 div>a>p 子节点的href属性
- NodeList为生成json的节点名称,link生成json字段别名
- {
- "NodeList":[
- {
- "link":"//book.qidian.com/info/1001324565"
- }]
- }
- 参数3内置属性对应:
- Text => 节点内容
- Html => 节点html
- 如不是上述name则提取属性内容
- 例如:
- div>h4>a:tojson(NodeList,this,href,href):tojson(NodeList,this,title,Text)
- {
- "NodeList":[
- {
- "href":"//book.qidian.com/info/1001324565",
- "title":"降临诸天"
- },
- {
- "href":"//book.qidian.com/info/1012835812",
- "title":"某美漫的神级强化师"
- }
- ]
- }
- 生成json属性名称会使用参数命名,
- 如果提取本节点则 提取的节点名称填写 this
- 例如:
- 表达式:
- div > a > div:tojson(title,this,Text,Text) //Text默认为节点内容
- 结果:
- {
- "title":{
- ["Text":"测试内容"]
- }
- }
- 表达式:
- div > a > div:tojson(内容,this,class,class)
- 结果:
- {
- "内容":{
- ["class":"info"]
- }
- }
- 如某个节点下有多项提取内容可使用链式提取,
- 例如:
- <div>
- <title>标题</title>
- <div>2017/5/9</div>
- <div>测试内容</div>
- </div>
- <div>
- <title>标题</title>
- <div>2017/5/9</div>
- <div>测试内容</div>
- </div>
- <div>
- <title>标题</title>
- <div>2017/5/9</div>
- <div>测试内容</div>
- </div>
- 表达式:div:tojson(title,title,title,Text):tojson(time,div[0],time,Text):tojson(data,div[1],data,Text)
- 结果:
- {
- "内容":[
- {"title":"标题","time":"2017/5/9","data":"测试内容"},
- {"title":"标题","time":"2017/5/9","data":"测试内容"},
- {"title":"标题","time":"2017/5/9","data":"测试内容"}
- ]
- }
- ----------------------------------------------------
- 基本功能1:
- ----------------------------------------------------
- 说明:我想获取a标签的所有内容
- <a>1</a>
- <a>2</a>
- <a>3</a>
- 指令:a
- ----------------------------------------------------
- 基本功能2:
- ----------------------------------------------------
- 说明:我想获取id为list1的div里面的a标签的所有内容
- <div id="list1">
- <dl>
- <dd>
- <a>1</a>
- </dd>
- <dd>
- <a>2</a>
- </dd>
- <dd>
- <a>3</a>
- </dd>
- </dl>
- </div>
- <div id="list2">
- <dl>
- <dd>
- <a>4</a>
- </dd>
- <dd>
- <a>5</a>
- </dd>
- <dd>
- <a>6</a>
- </dd>
- </dl>
- </div>
- 指令1:#list1 > dl > dd > a
- 或
- 指令2:div:find('id','list1') > dl > dd > a
- ----------------------------------------------------
- 功能1:
- ----------------------------------------------------
- 说明:指令前面是. 则为匹配class属性,要匹配出233
- <div class="test">233</div>
- 指令:.test
- ----------------------------------------------------
- 功能2:
- ----------------------------------------------------
- 说明:指令前面是# 则为匹配id属性,要匹配出233
- <div id="test">233</div>
- 指令:#test
- ----------------------------------------------------
- 功能3:
- ----------------------------------------------------
- 说明:如果想指定标签属性筛选,要匹配出233
- <div id="test">233</div>
- <div id="test">266</div>
- 指令:div:find('id','test')
- ----------------------------------------------------
- 功能4:
- ----------------------------------------------------
- 说明:如果想指定标签属性模糊筛选,要匹配出233和266
- <div id="test_123">233</div>
- <div id="test_456">266</div>
- 指令:div:fuzzyfind('id','test_')
- ----------------------------------------------------
复制代码
当然如果你对开源代码完全不感兴趣又或者只想用成品请下载附件模块源码和使用demo
|
评分
-
查看全部评分
|