scrappy

DESCRIPTION:

Scrappy is a tool that allows extracting information from web pages and producing RDF data. It uses the scraping ontology to define the mappings between HTML contents and RDF data.

An example of mapping is shown next, which allows extracting all titles from www.elmundo.es:

dc: http://purl.org/dc/elements/1.1/
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
sioc: http://rdfs.org/sioc/ns#
sc: http://lab.gsi.dit.upm.es/scraping.rdf#
*:
  rdf:type: sc:Fragment
  sc:selector:
    *:
      rdf:type: sc:UriSelector
      rdf:value: "http://www.elmundo.es/"
  sc:identifier:
    *:
      rdf:type: sc:BaseUriSelector
  sc:subfragment:
    *:
      sc:type: sioc:Post
      sc:selector:
        *:
          rdf:type: sc:CssSelector
          rdf:value: ".noticia h2, .noticia h3, .noticia h4"
      sc:identifier:
        *:
          rdf:type: sc:CssSelector
          rdf:value: "a"
          sc:attribute: "href"
      sc:subfragment:
        *:
          sc:type:     rdf:Literal
          sc:relation: dc:title
          sc:selector:
            *:
              rdf:type:  sc:CssSelector
              rdf:value: "a"

(The above code is serialized using YARF format, supported by LightRDF gem, as well as RDFXML, JSON, NTriples formats, which can also be used to define the mappings).

SYNOPSIS:

A knowledge base of mappings can be defined by storing RDF files inside ~/.scrappy/extractors folder. Then, the command-line tool can be used to get RDF data from web sites. You can get help on this tool by typing:

$ scrappy --help

Scrappy offers many different interfaces to get RDF data from a web page:

  • Command-line interface:

    $ scrappy -g example.com
  • Web Admin interface:

    $ scrappy -a
    Launching Scrappy Web Admin (browse http://localhost:3434)...
    == Sinatra/1.1.3 has taken the stage on 3434 for production with backup from Thin

    Then point your browser to localhost:3434 for additional directions.

  • Web Service interface:

    $ scrappy -s
    Launching Scrappy Web Server...
    == Sinatra/1.1.3 has taken the stage on 3434 for production with backup from Thin

    Then use the service in the same way as the Web Admin but for read-only operations.

  • Ruby interface:

    You can use Scrappy in a Ruby program by requiring the gem:

    require 'rubygems'
    require 'scrappy'
    
    # Parse a knowledge base
    kb = RDF::Parser.parse :yarf, open("https://github.com/josei/scrappy/raw/master/kb/elmundo.yarf").read
    
    # Set kb as default knowledge base
    Scrappy::Agent::Options.kb = kb
    
    # Create an agent
    agent = Scrappy::Agent.new
    
    # Get RDF output
    output = agent.request :method=>:get, :uri=>'http://www.elmundo.es'
    
    # Output all titles from the web page
    titles = output.find([], Node('dc:title'), nil)
    titles.each { |title| puts title }
  • RDF repository:

    Sesame functionality has been included in Scrappy. You can configure the repository options by editing the file config.yml placed the folder .scrappy, in your home dir. An example of this file can be found at the end of this README.

    You can get the data for a certain period of time, by using the time (-t, –time) option:

    $ scrappy -g example.org -t 3

    This would get all the data stored in Sesame for example.org in the last 3 minutes.

  • Sample config.yml

    # This is a sample configuration file, with the options to communicate with Sesame using Scrappy
    repository:
      # The host were Sesame is. Do not add the trailing '/'
      host: http://localhost
    
      # The port for the connection
      port: 8080
    
      # The time to consider the data in the repository valid, in minutes
      time: 15
    
      # The name of the repository
      repository: memory
    
      # The format to communicate with the repository
      format: ntriples
    
      # You can use any of the following formats:
      # rdfxml, ntriples, turtle, n3, trix, trig

INSTALL:

Install it as any other gem:

$ gem install scrappy

The gem also requires raptor library (in Debian systems: sudo aptitude install raptor-utils), which is used for outputting different RDF serialization formats.

PNG output of RDF graphs requires Graphviz (in Debian systems: sudo aptitude install graphviz).

In order to use Sesame, you will need to install it. Further instructions can be found in the openRDF website, more precisely, in www.openrdf.org/doc/sesame2/users/ch06.html .

CONTRIBUTORS:

  • José Ignacio Fernández

  • Alberto Mardomingo

  • Jacobo Blasco

LICENSE:

(The MIT License)

Copyright © 2010 José Ignacio Fernández (joseignacio.fernandez <at> gmail.com)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.