花了3个晚上,把readability最新的1.7.1转成了python版的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kingwkb
V2EX    Python

花了3个晚上,把readability最新的1.7.1转成了python版的

  •  
  •   kingwkb 2012-03-09 09:40:14 +08:00 9887 次点击
    这是一个创建于 4974 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://yanghao.org/tools/readability

    github上找的的都是太老的版本0.4

    其实算法这东西吧,看了别人的也就那样,但是要自己想出来确实不好弄,实现还是很容易的
    52 条回复    2016-07-10 16:03:15 +08:00
    hewigovens
        1
    hewigovens  
       2012-03-09 09:57:00 +08:00
    这也算porting吧,lz好效率
    kingwkb
        2
    kingwkb  
    OP
       2012-03-09 10:37:06 +08:00
    @hewigovens porting的意思是?
    bitsmix
        3
    bitsmix  
       2012-03-09 10:49:22 +08:00
    赞。

    但是我想说的是, readability 是把当前网页的源码 post 到自己的服务器上,而不是象 LZ 这样在自己服务器上抓的。

    不过无论如何,怒赞 LZ :)
    kingwkb
        4
    kingwkb  
    OP
       2012-03-09 11:03:25 +08:00
    @bitsmix 额,因为他有客户端可以这么做

    我么,就是学习学习他的算法,获取任何一个网页的主要内容,这个本身就很酷吧
    bitsmix
        5
    bitsmix  
       2012-03-09 11:05:18 +08:00
    @kingwkb 是很 cool ,我只是提供一下信息, FYI 一下 嘿。。
    run2
        6
    run2  
       2012-03-09 11:54:27 +08:00
    试了试cocoachina的新闻页 和 一些blog
    很准
    在找h1之类的么?
    kingwkb
        7
    kingwkb  
    OP
       2012-03-09 12:17:15 +08:00
    @sobigfish 不是找H1,大概就是html标签统计权重加减的方法
    mywaiting
        8
    mywaiting  
       2012-03-09 12:33:33 +08:00
    @bitsmix InstaPaper的实现才是使用Javascript把当前网页在浏览器中的DOM发送到Instapaper的服务器的;Readablity的实现则是用户提交一个网址,然后Readability使用自己的爬虫去抓取网页的内容的。

    测试方法:在一个需要登录的网站,使用其中的内容(简单点就是找一篇淫淫网的日志吧),Instapaper可以提交内容,而Readability则是无法得到页面。

    仅供参考。
    bitsmix
        9
    bitsmix  
       2012-03-09 13:59:50 +08:00
    @mywaiting readability 的 safari 扩展中的 "Read Now(`)" 是把 dom post出去的。

    Read Later(Shift-`) 是提交的 url.

    Instapaper 我没看。

    我想 Read Now 提交 dom 是为了更快的拿到生成好的便于阅读的文本吧。算一个同步操作,用户在这边等待。

    但是单从提交->返回的这个时间来看, 提交 url 肯定会比 提交 dom 短的多。

    反正你也是 later 才读,那解析内容的问题就交给服务器异步做好了。
    mywaiting
        10
    mywaiting  
       2012-03-09 14:27:47 +08:00
    @bitsmix 这个....那好吧....我调试过的就是Readability的Read Later的说

    刚才没有说得很清楚啊!

    呵呵!谢谢提醒!

    Ps:顺便问LZ的Port打算开源么?我想用一下你的实现.....谢谢!
    lala
        11
    lala  
       2012-03-09 15:02:48 +08:00
    正文里面的图片能够显示出来吗?试了一下,好像没有显示
    kingwkb
        12
    kingwkb  
    OP
       2012-03-09 15:23:29 +08:00
    @mywaiting @lala 如果是全路径的话可以,我没有做补全路径,等等做上

    通过大家的使用,刚才发现有视频的时候会有异常,现在解决了

    发现异常的地址 http://yanghao.org/tools/readability?url=http%3A%2F%2Fcdc.tencent.com%2F%3Fp%3D5311

    不知道这个是哪位朋友使用的
    kingwkb
        13
    kingwkb  
    OP
       2012-03-09 15:51:02 +08:00
    @lala 修复图片地址已经完成,欢迎测试,有问题可以反馈给我
    sohoer
        14
    sohoer  
       2012-03-09 16:36:33 +08:00
    @kingwkb 楼主搞垂直搜索吗?你的s. GG收录几W,看了都是CSDN的数据
    kingwkb
        15
    kingwkb  
    OP
       2012-03-09 16:42:32 +08:00
    @sohoer 那个s只是一个玩具,但是花了一个周末的时间做好之后就一直没管过他了,几年前研究过搜索,但工作一直跟这个没关系,所有很难坚持,这个牵扯的东西太多
    mywaiting
        16
    mywaiting  
       2012-03-09 17:36:22 +08:00
    Ps:顺便问LZ的Python实现打算开源么?我想用一下你的实现.....谢谢!
    mywaiting
        17
    mywaiting  
       2012-03-09 17:36:38 +08:00
    Ps:顺便问LZ的Python实现打算开源么?我想用一下你的实现.....谢谢!
    ywjno
        18
    ywjno  
       2012-03-09 18:25:17 +08:00
    出错了,'ascii' codec can't encode characters in position 4-17: ordinal not in range(128)
    kingwkb
        19
    kingwkb  
    OP
       2012-03-09 19:18:48 +08:00
    @mywaiting 这2天我捣鼓到github上面

    @ywjno 给出url吧,这个情况貌似编码问题,应该是chardet编码检测错误导致的,看来还的先检查http header和html header,没有声明编码的情况下再用chardet
    kojp
        20
    kojp  
       2012-03-09 19:25:04 +08:00
    怒赞!

    ----我以前用PHP实现过,呵呵。入库什么的,效率有点低,也可能是服务器配置问题
    kojp
        21
    kojp  
       2012-03-09 19:27:11 +08:00
    “我们上班是为了过上更好的生活,去看更美的风景,和心爱的人不为吃穿发愁,有消费欲时犒赏下自己,吃美味的食物穿漂亮的衣服,可奇怪的是,我们每天都把时间用在吃快餐,挤地铁,对着屏幕流眼泪,困倦的打瞌睡,粗糙的穿衣,重复的程序里,甚至都没时间和心爱的人躺... ”

    笑而不语,豆娘这段话很有深意,哈哈。。
    mywaiting
        22
    mywaiting  
       2012-03-09 20:27:52 +08:00
    @kingwkb 谢谢Kingwkb同学!回头更新了给个Github的地址.....谢谢!
    kingwkb
        24
    kingwkb  
    OP
       2012-03-09 21:43:42 +08:00
    @ywjno 这里还真不是编码问题,他的html不标准
    <html\u3000xmlns:og="http://ogp.me/ns#"\u3000xmlns:fb="http://www.facebook.com/2008/fbml">

    beautifulsoup无法解析,换了bs4,还是不行
    mywaiting
        25
    mywaiting  
       2012-03-09 22:12:21 +08:00
    @kingwkb 换lxml啊,这个比"美丽汤"好用很多啊,而且解析的Html文档也能支持不太规范的....
    ywjno
        26
    ywjno  
       2012-03-09 23:09:38 +08:00
    @kingwkb 奇怪了,这个blog的其他文章有的能解析的
    kingwkb
        27
    kingwkb  
    OP
       2012-03-10 14:48:25 +08:00
    chaojie
        28
    chaojie  
       2012-03-10 15:17:14 +08:00
    @kingwkb 好东西啊,收了
    run2
        29
    run2  
       2012-03-10 15:20:18 +08:00
    @kingwkb 没学过py 大概读了下。发现lz把分页去了。。。那像这种 http://dcdv.zol.com.cn/243/2430148.html 怎么办?只有1页 而且没连接。
    mywaiting
        30
    mywaiting  
       2012-03-10 15:30:15 +08:00
    @kingwkb 非常感谢你的Python版本的readability的移植工作!非常感谢!
    iray1991
        31
    iray1991  
       2012-03-10 22:13:49 +08:00
    @mywaiting
    这个。。移植后可用作?
    mywaiting
        32
    mywaiting  
       2012-03-11 00:44:08 +08:00
    @iray1991 这个....这个....就是有用吧,公司里面有个小东西要用到.....
    kafka0102
        33
    kafka0102  
       2012-03-11 02:31:33 +08:00
    如果是做正文抽取的话,想要做到很精准的效果是难的(尤其是准确剔除掉正文周边内容),尤其是来自一些不正规的站点网页。我能找到的相关开源产品有:boilerpipe、goose、jReadability、roadrunner(这个是抽模版的),还有一个忘记名字了,他们的效果都算不上太好(对正规的新闻站点会好些)。我自己实现了一个正文抽取的程序(也是很复杂的说,就别要代码了,暂时没有开源计划),可供测试的页面是:http://www.tuicool.com/te 。实际上,现在的实现算法不是我最初的想法,如果能基于浏览器内核分析出页面布局以及内容信息,对页面主体内容(不单单限于正文内容)的抽取效果会更好,而应用场景就更多了,这方面的经典算法就是微软研究院的VIPS,基于它也衍生了一堆论文。
    kingwkb
        34
    kingwkb  
    OP
       2012-03-11 12:31:12 +08:00
    @kafka0102 不知道你这个算法有多复杂,但是在使用效果上面没觉得比readability好
    kafka0102
        35
    kafka0102  
       2012-03-11 15:16:00 +08:00
    @kingwkb
    就我对readability试验效果来看,它只是对主体内容的提取,而不是准确的对正文提取,所以诸如相关文章、评论、广告、一些正文辅助信息等都可能被提出来(它是过滤了链接,但相关文本段落都在,如果要做手机阅读,这些信息是不可接受的),这种提取效果其实是很好做的,只要找到正文密度最大的段落就ok。而要准确提取正文,除了新闻页因为通常排版正规文本标准容易做外,面对诸如博客等各种来源,其实比较难解决的问题有:1)如何准确剔除评论信息,2)当正文内容简短,比如只有几行文字或图片,而诸如评论留言等干扰信息较多时,如何提取,3)当正文主要是链接内容时,如何提取,4)当正文内容格式复杂,比如包含多段代码、标签格式混乱,如何确定最大粒度的正文段,5)如何准确去除诸如广告、相关文章、诸如分享等辅助信息。其实效果做的好不好,多找几种不同的网页测试就知道了。在我做正文抽取时,其实就是找不同的网页做case,算法的细节策略也是不断调整,现在效果基本可以接受,但也存在一些bad case没有解决。因为我还根据一组页面做模版抽取,现在模版抽取效果就更差一些。就网页信息抽取来说,我觉得它是很有意思的事情,因为它可以做的事情实在太多了,除了抽正文,比如抽取评论、抽取新闻导航、抽取网站导航结构、抽取视频、商品等结构化信息、网页类型识别、网站类型识别等,就看用在什么地方了。
    kingwkb
        36
    kingwkb  
    OP
       2012-03-11 19:07:01 +08:00
    @kafka0102 恩,你说的的确是,基于视觉的算法应该是方向,但是如果是搜索引擎的内容提取,不能根据一个算法的,应该是多个算法结合,提取导航,正文,评论,等等这些对于有大量数据来说很容易,分析整个网站的html结构觉得比就单独分析一个页面要来的准确的多
    mlzboy
        37
    mlzboy  
       2012-03-11 22:58:56 +08:00
    @kafka0102 算法就不用了,说一下用到哪些工具吧
    kafka0102
        38
    kafka0102  
       2012-03-12 00:10:37 +08:00
    @mlzboy 什么工具?如果是说我的正文抽取程序,也就是使用jsoup做html解析。
    mlzboy
        39
    mlzboy  
       2012-03-13 21:27:06 +08:00
    @kafka0102 原来是搞java的哈,以为用webkit之类的,
    jerry
        40
    jerry  
       2012-03-13 21:32:52 +08:00
    good job
    最近在研究这个
    kafka0102
        41
    kafka0102  
       2012-03-14 00:12:50 +08:00
    @mlzboy 其实开始是想基于浏览器内核的,但webkit的文档太少、gecho的依赖太多,都不大可能在短时间搞定,后来使用gecho的java版本的XPCOM接口能搞了,不过在移植过程中存在一些问题就放弃了。。。我研究生时,还使用过VC内嵌的浏览器内核搞过,能获得布局信息,但因为时间关系,最终论文出来了,东西没做出来。
    Zzway
        42
    Zzway  
       2012-03-14 00:33:29 +08:00
    http://www.douban.com/note/203856722/
    只出来个标题

    另外问一下,我chrome上的readability扩展,read later以前只是显示一下saving、saved,现在会先转到readability的网站确认了再转回来,不知道为什么,这样好麻烦!
    kingwkb
        43
    kingwkb  
    OP
       2012-03-14 07:44:39 +08:00
    @Zzway 这个是特殊情况,他的整段文字都在pre标签内,这个readability可以获取到内容么? 我没用过readability
    kojp
        44
    kojp  
       2012-03-14 08:54:38 +08:00
    @kingwkb 坐等github地址~~
    flyingkid
        45
    flyingkid  
       2012-03-14 08:58:52 +08:00
    sohoer
        46
    sohoer  
       2012-03-14 09:12:01 +08:00
    kingwkb
        47
    kingwkb  
    OP
       2012-03-14 10:03:55 +08:00
    @flyingkid 这个是需要安装readability扩展才能用? 你发的连接我这只能看到标题,内容看不到
    mlzboy
        48
    mlzboy  
       2012-03-14 22:54:44 +08:00
    @kafka0102 我也是相似的经历,哈哈,可以多交流哈,在北京的话
    qichunren
        49
    qichunren  
       2012-04-17 12:00:12 +08:00
    standin000
        50
    standin000  
       2013-12-23 11:26:38 +08:00
    为什么不调用readability.com提供的parse API了?
    omg21
        51
    omg21  
       2016-06-27 21:21:03 +08:00
    下了楼主的代码,看着好高大上,但是不会用啊,楼主能不能举个例子?
    Hkale
        52
    Hkale  
       2016-07-10 16:03:15 +08:00
    @omg21 代码里不是有用法吗,注释里
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2320 人在线 &bsp; 最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 15:55 PVG 23:55 LAX 08:55 JFK 11:55
    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