精易论坛

标题: 史上最强html解析库 [打印本页]

作者: 123456ytr    时间: 2018-11-18 18:00
标题: 史上最强html解析库
本帖最后由 123456ytr 于 2018-11-18 18:02 编辑


git地址:https://github.com/1694439208/gumbo-Elss

使用易语言这么久了没有找到任何一个好用易用的html解析库
直到遇上了
Gumbo
参考了css选择器和xpath选择器语法,结合了两种方便之处

  1. 语法组成:指令

  2.             3大基本语法:标签名  .class值   #id值

  3.             多条指令使用语法:指令1 > 指令2 > 指令3 > ...

  4.             基本语法规范:
  5.             ----------------------------------------------------
  6.             字符串和属性使用单引号或者双引号引起来
  7.             ----------------------------------------------------


  8.             基本函数:
  9.             ----------------------------------------------------
  10.             find(属性,内容)   为查找属性值为内容的标签
  11.             fuzzyfind(属性,内容)   为查找属性值包含内容的标签
  12.             tojson(json节点名称,提取的节点名称,生成json字段别名,提取的属性)
  13.             tojson将来可以处理复杂嵌套,目前只支持一层对象,,多个属性,例如:
  14.                     {
  15.                             "test":[
  16.                                     {
  17.                                             "href":"www.baidu.com"
  18.                                     },
  19.                                     {
  20.                                             "href":"www.baidu.com"
  21.                                     }
  22.                             ]
  23.                     }
  24.             //将来会根据需求增加一些api
  25.             参数2内置属性对应:
  26.                     this => 自身节点
  27.                     如不是上述name则为表达式,例如:
  28.                             div > .info:tojson(NodeList,div>a,link,href)

  29.                             上述表达式 选取div节点后class为info的节点并且提取此节点下的 div>a>p 子节点的href属性
  30.                             NodeList为生成json的节点名称,link生成json字段别名
  31.                             {
  32.                                     "NodeList":[
  33.                                         {
  34.                                             "link":"//book.qidian.com/info/1001324565"
  35.                                         }]
  36.                             }

  37.             参数3内置属性对应:
  38.                     Text => 节点内容
  39.                     Html => 节点html
  40.                     如不是上述name则提取属性内容

  41.             例如:
  42.                           div>h4>a:tojson(NodeList,this,href,href):tojson(NodeList,this,title,Text)
  43.                           {
  44.                                     "NodeList":[
  45.                                         {
  46.                                             "href":"//book.qidian.com/info/1001324565",
  47.                                             "title":"降临诸天"
  48.                                         },
  49.                                         {
  50.                                             "href":"//book.qidian.com/info/1012835812",
  51.                                             "title":"某美漫的神级强化师"
  52.                                         }
  53.                                     ]
  54.                                 }

  55.             生成json属性名称会使用参数命名,
  56.             如果提取本节点则 提取的节点名称填写 this
  57.             例如:
  58.                     表达式:
  59.                     div > a > div:tojson(title,this,Text,Text) //Text默认为节点内容

  60.                                 结果:
  61.                                 {
  62.                             "title":{
  63.                                     ["Text":"测试内容"]
  64.                             }
  65.                     }

  66.                     表达式:
  67.                     div > a > div:tojson(内容,this,class,class)

  68.                     结果:
  69.                     {
  70.                             "内容":{
  71.                                     ["class":"info"]
  72.                             }
  73.                     }

  74.             如某个节点下有多项提取内容可使用链式提取,
  75.             例如:
  76.                     <div>
  77.                             <title>标题</title>
  78.                             <div>2017/5/9</div>
  79.                             <div>测试内容</div>
  80.                     </div>
  81.                     <div>
  82.                             <title>标题</title>
  83.                             <div>2017/5/9</div>
  84.                             <div>测试内容</div>
  85.                     </div>
  86.                     <div>
  87.                             <title>标题</title>
  88.                             <div>2017/5/9</div>
  89.                             <div>测试内容</div>
  90.                     </div>

  91.                     表达式:div:tojson(title,title,title,Text):tojson(time,div[0],time,Text):tojson(data,div[1],data,Text)
  92.                     结果:
  93.                     {
  94.                             "内容":[
  95.                                     {"title":"标题","time":"2017/5/9","data":"测试内容"},
  96.                                     {"title":"标题","time":"2017/5/9","data":"测试内容"},
  97.                                     {"title":"标题","time":"2017/5/9","data":"测试内容"}
  98.                             ]
  99.                     }


  100.             ----------------------------------------------------


  101.             基本功能1:
  102.             ----------------------------------------------------
  103.             说明:我想获取a标签的所有内容

  104.             <a>1</a>
  105.             <a>2</a>
  106.             <a>3</a>

  107.             指令:a
  108.             ----------------------------------------------------

  109.             基本功能2:
  110.             ----------------------------------------------------
  111.             说明:我想获取id为list1的div里面的a标签的所有内容

  112.             <div id="list1">
  113.                 <dl>
  114.                     <dd>
  115.                         <a>1</a>
  116.                     </dd>
  117.                     <dd>
  118.                         <a>2</a>
  119.                     </dd>
  120.                      <dd>
  121.                         <a>3</a>
  122.                     </dd>
  123.                 </dl>
  124.             </div>
  125.             <div id="list2">
  126.                 <dl>
  127.                     <dd>
  128.                         <a>4</a>
  129.                     </dd>
  130.                     <dd>
  131.                         <a>5</a>
  132.                     </dd>
  133.                      <dd>
  134.                         <a>6</a>
  135.                     </dd>
  136.                 </dl>
  137.             </div>


  138.             指令1:#list1 > dl > dd > a
  139.             或
  140.             指令2:div:find('id','list1') > dl > dd > a
  141.             ----------------------------------------------------

  142.             功能1:
  143.             ----------------------------------------------------
  144.             说明:指令前面是. 则为匹配class属性,要匹配出233

  145.             <div class="test">233</div>

  146.             指令:.test
  147.             ----------------------------------------------------


  148.             功能2:
  149.             ----------------------------------------------------
  150.             说明:指令前面是# 则为匹配id属性,要匹配出233

  151.             <div id="test">233</div>  

  152.             指令:#test
  153.             ----------------------------------------------------


  154.             功能3:
  155.             ----------------------------------------------------
  156.             说明:如果想指定标签属性筛选,要匹配出233

  157.             <div id="test">233</div>
  158.             <div id="test">266</div>  

  159.             指令:div:find('id','test')
  160.             ----------------------------------------------------


  161.             功能4:
  162.             ----------------------------------------------------
  163.             说明:如果想指定标签属性模糊筛选,要匹配出233和266

  164.             <div id="test_123">233</div>
  165.             <div id="test_456">266</div>

  166.             指令:div:fuzzyfind('id','test_')
  167.             ----------------------------------------------------
复制代码


当然如果你对开源代码完全不感兴趣又或者只想用成品请下载附件模块源码和使用demo



123.png

elss[6.1].rar

503.83 KB, 下载次数: 1631, 下载积分: 精币 -2 枚


作者: 沫茗    时间: 2018-11-18 18:09
感谢分享,支持一下
作者: gaoqing    时间: 2018-11-18 18:16
支持开源顶
作者: wang330130    时间: 2018-11-18 18:27
看的一脸懵逼
作者: jjjjjjwei    时间: 2018-11-18 19:18
这个不错  原来用的一个D写的
作者: xshn    时间: 2018-11-18 19:19
感谢分享,我会用模块就行了
作者: sqt123    时间: 2018-11-18 19:29
支持撸主开源
作者: futrueface    时间: 2018-11-18 20:29
谢谢分享了。。赶紧学习下。。。
作者: 116154801    时间: 2018-11-18 21:36
支持~~~~~~~~~~~~~~~~~~~~~~~~~~
作者: 芯林    时间: 2018-11-18 21:38
感谢开源!!感谢分享
作者: ld1460007044    时间: 2018-11-19 10:13
支持楼主,发更多好的源码。
作者: cld9557    时间: 2018-11-19 14:04
感谢分享,我会用模块就行了
作者: suntojava    时间: 2018-11-19 17:24
这个必需下载。好东西。
作者: 844798364    时间: 2018-11-20 02:35
强大.弹不会用.........
作者: 朗落辰    时间: 2018-11-20 16:54
666 给你一个么么哒
作者: xgrjw    时间: 2018-11-21 23:09
是不是真爱,自己心里要有点逼数
作者: 123456ytr    时间: 2018-11-21 23:14
xgrjw 发表于 2018-11-21 23:09
是不是真爱,自己心里要有点逼数


作者: Canada    时间: 2018-11-23 21:57
你这到底是Gumbo还是HtmlAgilityPack啊
作者: a362126101    时间: 2018-11-24 11:31
代码开源反手就是一个赞
作者: a362126101    时间: 2018-11-24 11:31
代码开源反手就是一个赞
作者: Gnay    时间: 2018-11-25 12:49
支持开源~!感谢分享
作者: steward    时间: 2018-11-26 23:57
支持开源~!感谢分享
作者: lcylcyll    时间: 2018-11-28 20:54
就是不知道怎么样来用的啊
有没有代码生成器啊,就是用CSS选择器的代码
作者: 国际机票    时间: 2018-11-29 20:33
谢谢,,收藏下,,,
作者: 123456ytr    时间: 2018-12-14 11:22
轻装前行 发表于 2018-11-23 21:57
你这到底是Gumbo还是HtmlAgilityPack啊

首先呢我写的是表达式引擎,配合Gumbo使用,当然我也可以配合任何一个解析引擎。
其次HtmlAgilityPack只是一个名字,因为我在net使用这个库比较方便我也就给他起个名字,当然我也可以叫他a,b,c,d 或者是阿猫,阿狗。
作者: 2442295093    时间: 2018-12-14 11:32
        很好很强悍,坚持下去哦~
作者: killhop1986    时间: 2018-12-20 19:03
必需要支持。。。。。。。
作者: 遵义静以修身    时间: 2018-12-20 22:00
直接支持一波
作者: 威武小草    时间: 2018-12-27 18:06
欢迎参赛,感谢分享优秀作品
作者: 123456ytr    时间: 2018-12-28 11:50
最新版源码发这里方便下载:https://share.weiyun.com/5YFSple
作者: 我冒得感情    时间: 2018-12-28 16:19
学习学习学习学习
作者: cfscc    时间: 2018-12-28 23:22
史上最强html解析库
作者: cfscc    时间: 2018-12-28 23:38
抱歉,下载本附件需要
          精币4枚 ,您帐号现有精币1枚
作者: cfscc    时间: 2018-12-28 23:39
抱歉,下载本附件需要
          精币4枚 ,您帐号现有精币1枚
作者: a365326    时间: 2018-12-29 14:17
        感谢分享,很给力!~
作者: 1623863129    时间: 2018-12-29 22:07
感谢分享,很给力!~
作者: lejw01    时间: 2019-1-1 04:02
感谢分享,很给力!~
作者: qqtiandi    时间: 2019-1-1 09:34
学习一下 哈
作者: 慎言    时间: 2019-1-5 16:11

感谢分享,很给力!~
作者: 一件标榜    时间: 2019-1-5 18:28
下载看看怎么样
作者: q951681306    时间: 2019-1-7 21:28
        支持开源~!感谢分享         不会用呐
作者: 安陆华硕专卖    时间: 2019-1-8 02:39
支持开源~!感谢分享
作者: zhydyhm    时间: 2019-1-8 11:04
拿走,谢谢分享,精品太多,今天拿到手软
作者: x0305x    时间: 2019-1-9 22:05
牛逼+格拉斯
作者: 隔世經年    时间: 2019-1-10 15:25
感谢分享!!
作者: 起風了    时间: 2019-1-11 09:25
欢迎参赛,感谢分享优秀作品
作者: hnlyh    时间: 2019-1-11 09:53
支持开源~!感谢分享
作者: snsolo    时间: 2019-1-11 12:01
真爱,不解释。。
作者: sofs    时间: 2019-1-11 22:04
        史上最强html解析库
作者: 子鱼乐    时间: 2019-1-20 11:48
谢谢,看看elss的效果如何
作者: xy1002    时间: 2019-1-25 23:38
感谢分享                                          
作者: auth    时间: 2019-2-16 21:01
感谢分享,下载
作者: 闪闪    时间: 2019-2-18 00:54
gumbo几年不更新了 好像还有一个叫myhtml 但是没有现成的win编译
作者: 123456ytr    时间: 2019-2-19 11:23
闪闪 发表于 2019-2-18 00:54
gumbo几年不更新了 好像还有一个叫myhtml 但是没有现成的win编译

多谢等我去看看这个不是太好用
作者: jiulung    时间: 2019-3-6 10:02
多谢等我去看看这个不是太好用
作者: reliable    时间: 2019-3-9 16:28
不错,下载学习
作者: 金多宝软件开发    时间: 2019-3-13 10:40

感谢分享,下载
作者: 买股票不用钱    时间: 2019-3-14 12:31
这个东西用在哪?
作者: Terrell    时间: 2019-3-17 12:39
感谢大神,这两天在做小说爬虫,正需要这个解析库,谢谢大神
作者: 晨氏家族    时间: 2019-4-1 12:59
支                      持下
作者: 1990343340    时间: 2019-4-15 23:03
厉害,支持,非常有用.
作者: Rayme    时间: 2019-5-11 12:36
支持楼主分享
作者: 275547762    时间: 2019-5-16 08:12
支持开源~!感谢分享
作者: charlie072    时间: 2019-5-18 01:26
谢谢分享~~~~~~~~~~
作者: yiyi111122    时间: 2019-5-31 14:56
谢谢分享~~~~~~~~~~
作者: 266558    时间: 2019-6-17 19:24
真是好东西啊,又涨知识了
作者: 忘记方位    时间: 2019-6-20 03:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: 忘记方位    时间: 2019-6-20 03:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: feifei321    时间: 2019-7-18 20:56
厉害了 大神
作者: feifei321    时间: 2019-7-18 20:59
怎么用啊?
作者: xy1002    时间: 2019-7-20 20:46

谢谢分享~~~~~~~~~~
作者: 冷剑    时间: 2019-7-28 21:44
当然如果你对开源代码完全不感兴趣又或者只想用成品请下载附件模块源码和使用demo
作者: lskdcl    时间: 2019-8-15 21:22
谢谢分享~~~~~~~~~~
作者: 441663619    时间: 2019-9-4 09:24
并不是开源,核心代码在DLL里
作者: tchello    时间: 2019-10-11 18:25
感谢分享!!!
作者: tchello    时间: 2019-10-24 16:41
支持开源!感谢分享!
作者: dentdent    时间: 2019-11-6 19:17
566666666666666666666666666666666666666666666
作者: 15191318454    时间: 2019-11-12 21:12
e2ee支持库的 网页内容解析器不服
作者: denz2008    时间: 2019-11-12 21:17

支持开源!感谢分享!
作者: 神一样的程序猿    时间: 2019-11-26 10:03
不错不错,支持支持······
作者: 孤静之美    时间: 2019-11-26 11:36
厉害的人呢
作者: applepear    时间: 2019-11-26 12:22
谢谢分享~~~~~~
作者: jangel1    时间: 2019-11-27 21:10
支持开源~!感谢分享
作者: zuxingshui    时间: 2019-11-28 23:02
厉害了,我的哥
作者: x7232647    时间: 2019-12-1 20:34
大佬有联系方式吗
作者: moxiangkelei    时间: 2019-12-11 16:48
感谢分享。我已经下载了两个,使用效果都不佳。
作者: Sam27    时间: 2020-1-14 13:45
学习下,感谢分享!
作者: 烫了个发    时间: 2020-1-31 14:10
a 里的 href 怎么取呢
作者: duanyijun    时间: 2020-2-14 15:32
看看再说了
作者: tplong    时间: 2020-3-3 09:46
这个东西怎么用哦~~!  哪位大佬 可以写个教程不!!
作者: njwj    时间: 2020-3-7 16:26
下载学习一下
作者: 冰棍好烫啊    时间: 2020-4-4 17:22

下载学习一下
作者: 章神通    时间: 2020-4-19 23:02
支持开源~!感谢分享
作者: umart123    时间: 2020-8-12 17:03
都是九年义务,咋你就这么优秀呢?
作者: Q3218199883    时间: 2020-8-22 15:59
        支持开源~!感谢分享
作者: 玄易    时间: 2020-10-17 20:01
这个是真的需要了
作者: quary888    时间: 2021-2-3 20:30
谢谢楼主分享!!! 好人一生平安!!!
作者: LG慈悲    时间: 2021-4-15 14:13
非常需要解析HTML看看
作者: 凉忆亦凉心    时间: 2021-4-16 05:13
感谢分享,很给力!~
作者: 明月清风i    时间: 2021-4-28 00:00
真爱,不解释。。




欢迎光临 精易论坛 (https://bbs.ijingyi.com/) Powered by Discuz! X3.4