V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
aisin
V2EX  ›  问与答

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

  •  1
     
  •   aisin · 2013-04-26 21:02:56 +08:00 · 8846 次点击
    这是一个创建于 4218 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很好奇Pocket, Instapaper, readability是如何准确分辨和抓取页面正文内容的?

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

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

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

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

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

    再去猜。

    More http://www.zhizhihu.com/html/y2013/4202.html
    aisin
        9
    aisin  
    OP
       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
        10
    jeeson  
       2013-04-26 23:20:48 +08:00   ❤️ 2
    @aisin 每种算法具体到不同网页表现不同,不好用个别网站的网页来推断一个算法的好坏

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

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

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

    以前比较过几个算法,总的来说 Readability 相对 Instapaper 和 Pocket 还是要更好一些,后来 Pocket 扩大规模了,可能有人手专门对提取算法做了改进了
    aisin
        11
    aisin  
    OP
       2013-04-26 23:49:13 +08:00
    @jeeson 非常感谢 了解了
    standin000
        12
    standin000  
       2013-12-23 12:34:09 +08:00
    感觉这个基于readability.com的开源产品的项目 https://github.com/luin/node-readability 比较靠谱
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1049 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.