Extraia informações de sites sem API com o Scrapy


Scrapy

O Scrapy é um framework gratuito que permite a extração de dados de um site que não possua API ou outro mecanismo semelhante. Ele age mapeando as informações desejadas na página, para armazená-las em um arquivo JSON. Dessa forma, o framework pode ser útil em diversos cenários, como mineração e arquivamento de dados.

Para instalar o Scrapy, é necessário ter o Python 2.7 na máquina, junto do seu instalador de pacotes. (A lista completa de pré-requisitos pode ser encontrada no guia de instalação.) Com o pip funcionando, basta invocar o comando:

pip install Scrapy

Na página de tutorial, podemos ver como funcionaria a captura de informações de novos torrents adicionados ao finado indexador Mininova, como URL, nome, descrição e tamanho de arquivos. Primeiro, seria necessário definir o tipo de dados que o robô mapearia, os chamados Scrapy Items, com as seguintes linhas de código:

import scrapy

class TorrentItem(scrapy.Item):
    url = scrapy.Field()
    name = scrapy.Field()
    description = scrapy.Field()
    size = scrapy.Field()

Em seguida, o robô precisa de instruções de como cada uma das informações buscadas aparece na página. Por exemplo, no caso do Mininova, as URLs aparecem assim: http://www.mininova.org/tor/NUMERO. Com o link de início e cada parâmetro definidos, o código final do crawler seria:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor

class MininovaSpider(CrawlSpider):

    name = 'mininova'
    allowed_domains = ['mininova.org']
    start_urls = ['http://www.mininova.org/today']
    rules = [Rule(LinkExtractor(allow=['/tor/\d+']), 'parse_torrent')]

def parse_torrent(self, response):
    torrent = TorrentItem()
    torrent['url'] = response.url
    torrent['name'] = response.xpath("//h1/text()").extract()
    torrent['description'] = response.xpath("//div[@id='description']").extract()
    torrent['size'] = response.xpath("//div[@id='info-left']/p[2]/text()[2]").extract()
    return torrent

Finalmente, depois que o programa é executado, ele mapeia as informações determinadas, para depois armazená-las no arquivo scraped_data.json. Elas podem então ser usadas conforme a necessidade do desenvolvedor.

Para mais exemplos, tutoriais e guia completo de instalação, acesse a página do Scrapy ou acompanhe o projeto pelo Twitter.