Day 16: Goose Extractor —— 好用的文章提取东西

编者注:我们发明了风趣的系列文章《30天进修30种新技术》,正在翻译,一天一篇更新,年末礼包。下面是第 16 天的内容。

本日的“30天进修30种新技术”的主题是怎样运用Python举行文章提取。这几个月来,我对文章提取很感兴致,由于我想写一个Prismatic克隆。Prismatic建立基于用户兴致的消息源。提取文章的重要内容、图片和其他元信息对大多数相似Prismatic的内容发明站点很有效。本文中,我们将进修怎样运用Python的goose-extractor包来完成这个使命。我们起首引见一些基础知识,然后运用Goose Extractor 的 API 来开辟一个简朴的Flask运用。

《Day 16: Goose Extractor —— 好用的文章提取东西》

Goose Extractor是什么?

Goose Extractor是一个Python的开源文章提取库。能够用它提取文章的文本内容、图片、视频、元信息和标签。Goose本来是由Gravity.com编写的Java库,近来转向了scala。

Goose Extractor网站是这么引见的:

Goose Extractor完整用Python重写了。目的是给定恣意资讯文章或许恣意文章类的网页,不仅提掏出文章的主体,同时提掏出一切元信息以及图片等信息。

为何体贴Goose Extractor

我决议进修Goose Extractor是由于:

  1. 我盘算开辟须要文章提取功用的运用。Goose Extractor基于NLTKBeautiful Soup,分别是文本处理和HTML剖析的领导者。

  2. 我想相识怎样用Python举行文章提取。

装置Goose Extractor

我们起首须要装置Python和virtualenv,本文运用的Python版本是2.7

然后运用以下敕令装置:

mkdir myapp
cd myapp
virtualenv venv --python=python2.7
. venv/bin/activate
pip install goose-extractor

GitHub堆栈

本日的示例顺序的代码可从GitHub获得。

运用

示例运用运转在 OpenShift 上 http://gooseextractor-t20.rhcloud.com/ 用户能够提交链接,运用会显现题目,重要图片和正文的前200个字符。

《Day 16: Goose Extractor —— 好用的文章提取东西》

我们将开辟一个简朴的REST API Flask运用。假如你不相识Flask,你能够看这篇我之前写的文章

装置Flask:

. venv/bin/activate
pip install flask

myapp目录下建立app.py,内容以下:

from flask import Flask, request, render_template,jsonify
from goose import Goose

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    return render_template('index.html')

@app.route('/api/v1/extract')
def extract():
    url = request.args.get('url')
    g = Goose()
    article = g.extract(url=url)
    response = {'title' : article.title , 'text' : article.cleaned_text[:250],'image': article.top_image.src}
    return jsonify(response)

if __name__ == "__main__":
    app.run(debug=True)

诠释下上面的代码:

  1. flask包导入了Flask类、request对象、jsonify函数和render_template函数。

  2. goose包导入Goose类。

  3. 定义了/index的路由。若用户向//index发送GET要求,会衬着index.html页面。

  4. 定义了/api/v1/extract路由。我们从要求对象中猎取url,然后建立了一个Goose类的实例。接着提取文章。末了建立一个json对象并返回该对象。json对象中包含题目、文本和重要图片。

  5. 末了我们运用python app.py敕令来启动开辟效劳器,以运转运用。我们把上面的代码复制到app.py文件中。我们同时经由过程Debug=True开启了调试,如许当意料之外的状况出现时,浏览器就能够供应一个交互式的调试器。开启调试的另一个优点是,修改文件 以后,效劳会自动从新加载。我们能够让调试器在背景运转,然后继承在我们的运用上事情。这供应了高效的开辟环境。

我们将在index.html中运用Twitter Bootstrap来增加款式。我们同时运用了jQuery,以便完成keyup事宜触发REST挪用。退格、制表符、回车、上、下、左、右不会触发REST挪用。

<!DOCTYPE html>
<html>
<head>
    <title>Extract Title, Text, and Image from URL</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="static/css/bootstrap.css">
    <style type="text/css">
    body {
      padding-top:60px;
      padding-bottom: 60px;
    }
  </style>
</head>
<body>

<div class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">TextExtraction</a>
        </div>

    </div>
  </div>

<div id="main" class="container">
    <form class="form-horizontal" role="form" id="myform">
        <div class="form-group">
            <div class="col-lg-4">
                <input type="url" id="url" name="url"  class="form-control" placeholder="Url you want to parse" required>
            </div>
        </div>
        <div class="form-group">
            <input type="submit" value="Extract" id="submitUrl" class="btn btn-success">
        </div>
    </form>
</div>

<div id="loading" style="display:none;" class="container">
    <img src="/static/images/loader.gif" alt="Please wait.." />
</div>

<div id="result" class="container">

</div>

<script type="text/javascript" src="static/js/jquery.js"></script>
<script type="text/javascript">
    $("#myform").on("submit", function(event){
        $("#result").empty();
        event.preventDefault();
        $('#loading').show();
        var url = $("#url").val()
        $.get('/api/v1/extract?url='+url,function(result){
            $('#loading').hide(); 
            $("#result").append("<h4>"+result.title+"</h4>");
            $("#result").append("<img src='"+result.image+"' height='300' width='300'</img>");
            $("#result").append("<p class='lead'>"+result.text+"</p>");
    })


    });

</script>
</body>
</html>

你能够从github 堆栈中复制js和css文件。

上面的HTML文件中,表单提交触发REST挪用。当我们接受到回应后,将它附加到resultdiv中。

布置到云端

在我们布置运用到OpenShift之前,我们须要先设置一下:

  1. 注册一个OpenShift账号。注册是完整免费的,Red Hat给每一个用户三枚免费的Gear,能够用Gear运转你的运用。在写作此文的时刻,每一个用户能免费运用统共 1.5 GB 内存和 3 GB 硬盘空间。

  2. 装置 rhc客户端东西rhc是ruby gem,因而你的机子上须要装有 ruby 1.8.7以上版本。 只需输入 sudo gem install rhc即可装置 rhc 。假如你已装置过了,确保是最新版。运转sudo gem update rhc即可晋级。关于设置rhc敕令行东西的详细信息,请参考: https://openshift.redhat.com/community/developers/rhc-client-tools-install

  3. 运用 rhc 的 setup 敕令设置你的 OpenShift 账号。这个敕令会协助你建立一个定名空间,同时将你的ssh公钥上传至 OpenShift 效劳器。

设置以后,我们能够经由过程以下敕令建立一个新的OpenShift运用。

rhc create-app day16demo python-2.7 --from-code https://github.com/shekhargulati/day16-goose-extractor-demo.git --timeout 180

这会为我们建立一个名为gear的运用容器,并自动设置响应的SELinux政策和cgroup设置。OpenShift同时会为我们建立一个私有的git堆栈,并将其克隆到当地。末了,OpenShift会自动设置DNS。运用能够在以下地点接见 http://gooseextractor-t20.rhcloud.com/

好了,这就是本日的内容。请不停反应。

原文 Day 16: Goose Extractor–An Article Extractor That Just Works
翻译 SegmentFault

    原文作者:weakish
    原文地址: https://segmentfault.com/a/1190000000362182
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞