zoukankan      html  css  js  c++  java
  • 提取网页正文的开源库的比较

    前段时间在工作中,需要提取出网页的正文,就试验了一下机中提取网页正文开源库。

    试验中主要试验了java和python两种提取正文的开源库,测试的连接是:http://www.chinanews.com/gj/2014/11-19/6791729.shtml。结果如下:

     

    A.Java:

    1.Cx-extractor( http://cx-extractor.googlecode.com):基于行块的分布来提取网页中的正文。

    提取的方法是首先使用Jsoup来获取网页的内容,之后将内容传给cx-extractor,交由其来解析,核心代码如下所示:

    1 // 通过Jsoup来获取html,在此设置了范文数据包的头部,因为有些网站会屏蔽爬虫。
    2 String content = Jsoup.connect("http://www.chinanews.com/gj/2014/11-19/6791729.shtml").userAgent("Mozilla/5.0 (jsoup)").get().html();               
    3 // html_article即为解析出的正文。
    4 String html_article = CXTextExtract.parse(content);

    结果:这个库有时候会有错误,会将不属于正文的内容提取出来,例如一些无关的底部内容,或者一些链接。但性能比较高,约几十毫秒。

    2.Boilerpipe(http://code.google.com/p/boilerpipe/):

    基于网页dom树来解析,内部有多种解析器,比较准确,但是时间在100毫秒左右。

    核心代码如下所示:

    1 String content = Jsoup.connect("http://www.chinanews.com/gj/2014/11-19/6791729.shtml").userAgent("Mozilla/5.0 (jsoup)").get().html();
    2 // 使用Bolierpipe来获取网页正文内容
    3 String parse_article = ArticleExtractor.INSTANCE.getText(content);

     结果:结果比较准确,性能比稍慢,大约在100毫米左右。

    B.python

    1. Newspaper: 这个库可以实现由网上下载到解析,一条龙服务:

    核心示例代码如下所示:

    1 from newspaper import Article
    2 a = Article('http://www.chinanews.com/gj/2014/11-19/6791729.shtml, language='zh')
    3 a.download()
    4 a.parse()

    结果:耗时会比较长,第一次执行耗时4s左右,解析效果也一般。

    2.Python-Goose

    代码比较方便,但是,''http://www.chinanews.com/gj/2014/11-19/6791729.shtml,此网址没有解析出来。

     示例代码如下所示:

    1 from goose import Goose
    2 from goose.text import StopWordsChinese
    3 url = 'http://www.chinanews.com/gj/2014/11-19/6791729.shtml'
    4 g = Goose({'stipwords_class':StopWordsChinese})
    5 article = g.extract(url = url)
    6 print article.cleaned_text[:150]

    结果:效果不好,解析不出来。

    3.Python-readability

    示例代码如下所示:

    1 from readability.readability import Document
    2 import urllib
    3 html = urllib.urlopen('http://www.chinanews.com/gj/2014/11-19/6791729.shtml').read()
    4 readable_article = Document(html).summary()
    5 readable_title = Document(html).short_title()

    结果:能过滤出部分正文,但是正文包含很多标签。效果不很好。

    最终结合上面结果和项目,选择了“Boilerpipe”,但是仍有部分网页是提取不出来正文的,还需要努力,同时,有些网页不堪忍睹。

  • 相关阅读:
    实现连续测试,要做的事情【译】
    Go语言HTTPServer开发的六种实现
    JSON必知必会【PDF+视频教程】
    给JSONObject添加自定义遍历方法
    利用守护线程隐式关闭线程池
    从错误中学习
    Groovy动态添加方法和属性及Spock单测
    持续测试、持续集成、持续交付、持续部署和DevOps
    有关OAuth 2.0简化模式中步骤D-F的解释
    Spring笔记(五):bean的自动装配
  • 原文地址:https://www.cnblogs.com/yetuweiba/p/4149683.html
Copyright © 2011-2022 走看看