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 · 9430 次点击
    这是一个创建于 4678 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 一下 嘿。。
    sobigfish
        6
    sobigfish  
       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 好东西啊,收了
    sobigfish
        29
    sobigfish  
       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   ·   实用小工具   ·   2850 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:36 · PVG 21:36 · LAX 05:36 · JFK 08:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.