Pocket, Instapaper, readability是如何快速准确抓取某个页面正文内容的?

2013-04-26 21:02:56 +08:00
 aisin
很好奇Pocket, Instapaper, readability是如何准确分辨和抓取页面正文内容的?

有的页面是3栏, 2栏, 或者其他布局, 这些稍后阅读工具是如何快速准确识别内容, 去除杂质的?
8893 次点击
所在节点    问与答
12 条回复
ericFork
2013-04-26 21:06:34 +08:00
lookhi
2013-04-26 21:13:32 +08:00
一个字 猜的
aisin
2013-04-26 21:21:14 +08:00
@lookhi 这是2个字 >:)
aisin
2013-04-26 21:21:27 +08:00
@ericFork 看不懂python
binux
2013-04-26 21:22:44 +08:00
查找最多p的div
aisin
2013-04-26 21:23:36 +08:00
@binux 这个不对的吧, 有很多页面正文是用 br 来换行, 不用p的
jeeson
2013-04-26 21:51:50 +08:00
大部分网页正文提取算法都是根据开源的 Readability 算法修改的,主要是计算文本密度,以及 link 密度,评估最可能的节点,然后在扣除 评论之类的内容。算法依赖经验参数,不容易改进。这种算法确实如 lookhi 说的,“猜”测的。

后来 Readability 改为闭源,算法在后台运行,应该有一些网页是根据数据来改进。

Chrome 插件 Send to Kindle (by Klip.me) 的正文提取算法是另一种方法,模仿人眼的对焦过程,先在页面的可视区域找到 “种子”,然后在扩大/收缩。并且能够根据用户的高亮选择自动训练出对焦数据。但是这种方法需要网页加载渲染完毕,适合作为插件,不适合在 Server 端运行。相对来说,对焦算法算是 “推”测的

还有一种方法,通过“同构分析”反推出网页的“生成”结构,diffbot 可能用的是这种方法。这种方法我之前做过试验,能获得结果的情况下准确度高。不过当时算法没做完,许多网站没有反推出结构。
lookhi
2013-04-26 22:13:51 +08:00
楼上很全了
渲染的 统称为基于视觉的

反推结构的,基于一个假设前提,网站的页面都是基于模版出来了。
机器在分析某个页面的时候,会去自动的找若干个看上去类似的页面,进行页面比对。
删除类似的雷同部分,比如导航页眉页脚的,形成一个页面的框架。

再去猜。

More http://www.zhizhihu.com/html/y2013/4202.html
aisin
2013-04-26 22:38:54 +08:00
@jeeson
@lookhi 非常感谢2位.

原来Readability 开源过算法.

不过从个人使用感觉来看, Readability 的正文提取能力是最差的, 我Readability 上的很多页面都提取不到标题. 还有更离谱的错误是无法获取整个页面 'Readability was unable to parse the Content for This Article'. 而我用pocket就从来没碰到提取不到标题的情况, 无法获取整个页面的情况也非常少见.

很不解Readability 为什么连页面的标题都取不到, 一个页面什么都可以没有, 但必定有title标签的吧
jeeson
2013-04-26 23:20:48 +08:00
@aisin 每种算法具体到不同网页表现不同,不好用个别网站的网页来推断一个算法的好坏

Readability 不是简单取页面的 head->title,而是首先设法从正文中获得标题,然后再在正文中的扣除标题,避免重复。这样的好处是可以获得更准确的标题,比如 许多网站在 head->title 中加了许多网站信息。不过按理说,最坏情况下,至少可以用 head->title,不至于提取不到标题

这些算法在提取不到的时候,会用整个网页的内容然后根据一些规则做一下过滤,获得的结果也勉强可以接受

Readability 新版改为后台处理,有可能后台无法抓取到你的网页,所以导致抓取失败。我对他的新版本不了解

以前比较过几个算法,总的来说 Readability 相对 Instapaper 和 Pocket 还是要更好一些,后来 Pocket 扩大规模了,可能有人手专门对提取算法做了改进了
aisin
2013-04-26 23:49:13 +08:00
@jeeson 非常感谢 了解了
standin000
2013-12-23 12:34:09 +08:00
感觉这个基于readability.com的开源产品的项目 https://github.com/luin/node-readability 比较靠谱

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

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

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

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

© 2021 V2EX