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

2020-09-08 17:27:48 +08:00
 tikazyq

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

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

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

4742 次点击
所在节点    分享创造
38 条回复
lemonda
2020-09-08 21:28:01 +08:00
有个需求不知道能不能实现,用来迁移网站用的,比如一个网站有很多个产品页面,每个页面都是单独做的,大同小异,无法从代码抓,因为没有特别的标签,OCR 也不行因为有的是 tab,要点开了才能看。
想法是先在几个测试页面上截图一样点和框出要采集的内容,剩余的它学会了自己采。
herozzm
2020-09-08 21:31:25 +08:00
ajax 加载的,json 格式的 xml 也能?规则虽老但好用,智能虽好但没法投入生产
tikazyq
2020-09-08 22:01:36 +08:00
@lemonda 你这种是复杂需求,需要更复杂的算法才可以
tikazyq
2020-09-08 22:02:08 +08:00
@herozzm html 就是 xml,json 也是结构化的,本质都是一样的
imn1
2020-09-08 22:03:30 +08:00
不需要深度,有足够 html parse 能力就行,深度做这个也太废机器了
我暂时想到的是,这些规则的表格,css 也是规范且类似的,联系父节点、子节点一起分析就够了
之前想写个类似的(目的是辅助浏览,整行整列隐藏个人不关注的内容),只是我多年没做前端,缺乏这个能力和动力
Mitt
2020-09-08 22:07:45 +08:00
以为会有链接。。。
haoxuexiaoyao
2020-09-08 23:10:23 +08:00
什么都没有 看了个图
binux
2020-09-09 00:19:39 +08:00
单页重复结果识别也太简单了。
五年前我都做到多页的模板识别了。

然而并没有什么卵用。
要准确比如手写,要泛化不如直接训练一个 model 。
tikazyq
2020-09-09 09:24:51 +08:00
@binux 大佬厉害,有不有相关的链接可以参考下?
tikazyq
2020-09-09 09:25:10 +08:00
@Mitt
@haoxuexiaoyao 现在算法还在优化,等成熟了会放出来
tikazyq
2020-09-09 09:26:23 +08:00
@binux 其实真正的列表识别还是有一些 trick 的,需要将 html 各种信息进行分析统计判断,要做到高准确率还是有些难度的
RyougiShiki
2020-09-09 10:06:15 +08:00
用过一款软件 sitesucker,爬取效果相当好,好奇源码。
ziyunhx
2020-09-09 11:01:04 +08:00
https://github.com/ziyunhx/thrinax
我 2017 年开源的列表页和文章页自动识别代码,有兴趣的可以看看。
tikazyq
2020-09-09 11:25:59 +08:00
@ziyunhx 大佬厉害,回头研究下
bianz103
2020-09-10 20:09:02 +08:00
怎么知道 ul li 这些渲染后位置呢
tikazyq
2020-09-10 20:43:02 +08:00
@bianz103 这个也是一个小算法,生成 selector 的
milu2003516968
2020-09-15 13:58:05 +08:00
牛逼是牛逼,但我认为爬虫的痛点并不在于自动识别。
tikazyq
2020-09-15 15:54:46 +08:00
@milu2003516968 对于不会写爬虫代码的人来说足够了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX