开发了一个自动识别 HTML 列表的算法,感觉离智能爬虫又近了一步 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
tikazyq
V2EX    分享创造

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

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

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

可以看到,列表基本都识别出来了,一些列表子项( 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     Solana     3498 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 24ms UTC 04:40 PVG 12:40 LAX 21:40 JFK 00:40
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86