V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tikazyq
V2EX  ›  分享创造

开发了一个自动识别 HTML 列表的算法,感觉离智能爬虫又近了一步

  •  2
     
  •   tikazyq ·
    tikazyq · 2020-09-08 17:27:48 +08:00 · 4745 次点击
    这是一个创建于 1538 天前的主题,其中的信息可能已经有所发展或是发生改变。

    话不多说,下面给几个主流网站列表页的识别效果。

    可以看到,列表基本都识别出来了,一些列表子项( List Item )的字段也标注出来了。这个算法还支持分页的识别。如果进一步优化,甚至可以做到网络爬虫中的自动驾驶,输入一个坐标(网站 URL )就可以自动抓数据,不需要写 XPath 各种抓取配置规则。做到这一步,说明离智能爬虫就不远啦。

    算法不是基于 OCR 的,因此非常快,后续会进一步优化,欢迎大家提意见。

    38 条回复    2020-09-15 15:54:46 +08:00
    sillydaddy
        1
    sillydaddy  
       2020-09-08 17:58:02 +08:00
    这个做好了就再也不怕网站改版改 html 了!!是基于什么实现的呢?
    盲猜一下,应该不是基于深度学习,但也应该不是基于渲染的位置什么的。
    猜不出来。。
    yunser
        2
    yunser  
       2020-09-08 19:03:54 +08:00 via iPhone
    @sillydaddy 列表有个共同特征,就是子元素的结构基本一致,我猜是根据这个判断的。还有 ul li 。
    guyskk0x0
        3
    guyskk0x0  
       2020-09-08 19:05:20 +08:00 via Android
    很赞!开源吗?还是接口服务?
    louettagfh
        4
    louettagfh  
       2020-09-08 19:32:14 +08:00
    开源吗 之前想基于 OCR 搞一个
    tikazyq
        5
    tikazyq  
    OP
       2020-09-08 19:52:57 +08:00 via iPhone
    @sillydaddy 是的,解决的就是这个问题,但既不是根据深度学习也不是根据渲染位置,是非常简单的算法
    tikazyq
        6
    tikazyq  
    OP
       2020-09-08 19:53:21 +08:00 via iPhone
    @yunser 思路基本正确,不过实现要稍微复杂一些
    tikazyq
        7
    tikazyq  
    OP
       2020-09-08 19:53:49 +08:00 via iPhone
    @guyskk0x0 暂时不打算开源,可能会暂时做成 api 供测试
    tikazyq
        8
    tikazyq  
    OP
       2020-09-08 19:54:02 +08:00 via iPhone
    @louettagfh 同上
    bojue
        9
    bojue  
       2020-09-08 19:55:20 +08:00 via iPhone
    @tikazyq 不是有自动解析 dom 元素算法,爬虫解析识别图片,文字,链接,然后全网爬
    marcushbs
        10
    marcushbs  
       2020-09-08 19:55:41 +08:00
    想起了逝去的 Kimono
    tikazyq
        11
    tikazyq  
    OP
       2020-09-08 20:09:25 +08:00 via iPhone
    @bojue 我记得后羿采集器可以,但也没公开算法,而且貌似收费,目前至少开源做的很准的还是比较少
    tikazyq
        12
    tikazyq  
    OP
       2020-09-08 20:10:00 +08:00 via iPhone
    @marcushbs 可惜了,不过 kimono 也不完全自动化,需要一些监督,当时是个不错的产品
    Tianyan
        13
    Tianyan  
       2020-09-08 20:13:59 +08:00
    爬来爬去把搜索引擎搞成了垃圾搜索引擎
    bojue
        14
    bojue  
       2020-09-08 20:17:10 +08:00
    @tikazyq 那倒是,之前看头条招聘爬虫 JD
    heiheidewo
        15
    heiheidewo  
       2020-09-08 20:17:12 +08:00
    如果是我写的那种不规范的 html 看楼主怎么识别
    tikazyq
        16
    tikazyq  
    OP
       2020-09-08 20:23:13 +08:00 via iPhone
    @Tianyan 现在主流搜索引擎都有比较健全和复杂的算法来规避垃圾内容了,除非你用的是垃圾搜索引擎
    tikazyq
        17
    tikazyq  
    OP
       2020-09-08 20:23:34 +08:00 via iPhone
    @bojue 他们也做智能爬虫?
    tikazyq
        18
    tikazyq  
    OP
       2020-09-08 20:24:10 +08:00 via iPhone
    @heiheidewo 爬虫开发者最怕你这样的前端杀手
    mscb
        19
    mscb  
       2020-09-08 20:57:31 +08:00 via Android
    啥原理?用上类似于 yolo 这类深度学习的技术吗?
    tikazyq
        20
    tikazyq  
    OP
       2020-09-08 21:03:02 +08:00 via iPhone
    @mscb 不是深度学习哦,算法其实还比较简单
    lemonda
        21
    lemonda  
       2020-09-08 21:28:01 +08:00
    有个需求不知道能不能实现,用来迁移网站用的,比如一个网站有很多个产品页面,每个页面都是单独做的,大同小异,无法从代码抓,因为没有特别的标签,OCR 也不行因为有的是 tab,要点开了才能看。
    想法是先在几个测试页面上截图一样点和框出要采集的内容,剩余的它学会了自己采。
    herozzm
        22
    herozzm  
       2020-09-08 21:31:25 +08:00 via Android
    ajax 加载的,json 格式的 xml 也能?规则虽老但好用,智能虽好但没法投入生产
    tikazyq
        23
    tikazyq  
    OP
       2020-09-08 22:01:36 +08:00 via iPhone
    @lemonda 你这种是复杂需求,需要更复杂的算法才可以
    tikazyq
        24
    tikazyq  
    OP
       2020-09-08 22:02:08 +08:00 via iPhone
    @herozzm html 就是 xml,json 也是结构化的,本质都是一样的
    imn1
        25
    imn1  
       2020-09-08 22:03:30 +08:00
    不需要深度,有足够 html parse 能力就行,深度做这个也太废机器了
    我暂时想到的是,这些规则的表格,css 也是规范且类似的,联系父节点、子节点一起分析就够了
    之前想写个类似的(目的是辅助浏览,整行整列隐藏个人不关注的内容),只是我多年没做前端,缺乏这个能力和动力
    Mitt
        26
    Mitt  
       2020-09-08 22:07:45 +08:00
    以为会有链接。。。
    haoxuexiaoyao
        27
    haoxuexiaoyao  
       2020-09-08 23:10:23 +08:00
    什么都没有 看了个图
    binux
        28
    binux  
       2020-09-09 00:19:39 +08:00 via Android
    单页重复结果识别也太简单了。
    五年前我都做到多页的模板识别了。

    然而并没有什么卵用。
    要准确比如手写,要泛化不如直接训练一个 model 。
    tikazyq
        29
    tikazyq  
    OP
       2020-09-09 09:24:51 +08:00
    @binux 大佬厉害,有不有相关的链接可以参考下?
    tikazyq
        30
    tikazyq  
    OP
       2020-09-09 09:25:10 +08:00
    @Mitt
    @haoxuexiaoyao 现在算法还在优化,等成熟了会放出来
    tikazyq
        31
    tikazyq  
    OP
       2020-09-09 09:26:23 +08:00
    @binux 其实真正的列表识别还是有一些 trick 的,需要将 html 各种信息进行分析统计判断,要做到高准确率还是有些难度的
    RyougiShiki
        32
    RyougiShiki  
       2020-09-09 10:06:15 +08:00
    用过一款软件 sitesucker,爬取效果相当好,好奇源码。
    ziyunhx
        33
    ziyunhx  
       2020-09-09 11:01:04 +08:00
    https://github.com/ziyunhx/thrinax
    我 2017 年开源的列表页和文章页自动识别代码,有兴趣的可以看看。
    tikazyq
        34
    tikazyq  
    OP
       2020-09-09 11:25:59 +08:00
    @ziyunhx 大佬厉害,回头研究下
    bianz103
        35
    bianz103  
       2020-09-10 20:09:02 +08:00 via iPhone
    怎么知道 ul li 这些渲染后位置呢
    tikazyq
        36
    tikazyq  
    OP
       2020-09-10 20:43:02 +08:00
    @bianz103 这个也是一个小算法,生成 selector 的
    milu2003516968
        37
    milu2003516968  
       2020-09-15 13:58:05 +08:00
    牛逼是牛逼,但我认为爬虫的痛点并不在于自动识别。
    tikazyq
        38
    tikazyq  
    OP
       2020-09-15 15:54:46 +08:00
    @milu2003516968 对于不会写爬虫代码的人来说足够了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   885 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:52 · PVG 04:52 · LAX 12:52 · JFK 15:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.