Pocket, Instapaper, readability是如何快速准确抓取某个页面正文内容的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
aisin
V2EX    问与答

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

  •  1
     
  •   aisin 2013-04-26 21:02:56 +08:00 9239 次点击
    这是一个创建于 4555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很好奇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     Solana     2928 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:26 PVG 08:26 LAX 17:26 JFK 20:26
    Do have faith in what you're doing.
    ubao msn 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