19 Abril 2018

Scraping data with SSIS and Python

Python é uma linguagem de programação muito poderosa. Combinada com SSIS, consegue providenciar soluções robustas e flexíveis para diversos requisitos de negócio.

Nos atuais cenários de negócio de rápida mutação, torna-se necessário para certas empresas analisarem informação que ainda não se encontra disponível nos seus sistemas de Bases de dados. É aqui que entra o Data Scraping, mais especificamente Web Scraping, para fornecer os dados necessários. Neste exemplo, vamos “raspar” dados do website: https://www.bi4all.pt/noticias/blog/ e carregar esses dados para o SQL server, utilizando o SSIS para esse efeito.

Para começarmos a “raspar”, é necessário o seguinte:

 

SSIS Python data

 

C:\Users\[USER]\AppData\Local\Programs\Python\Python36-32

Antes de criar o script, é necessário fazer download da biblioteca BeautifulSoup, que nos vai providenciar um conjunto de ferramentas em Python para fazermos o Web Scraping.

Para fazermos download do BeautifulSoup, deve-se abrir um terminal através de Windows+R e escrever CMD.

No terminal deve-se escrever CD e o caminho para a pasta scripts do Python:

C:\Users\[USER]\AppData\Local\Programs\Python\Python36-32\Scripts

SSIS Python data

 

Deve-se escrever o seguinte: pip.exe install BeautifulSoup4

Depois da instalação, fecha-se o terminal e abre-se o editor de texto.

O primeiro passo do script é para importar as bibliotecas que precisamos:

SSIS Python data

 

De seguida precisamos de especificar o ficheiro que vai conter os dados que vamos “raspar” e o delimitador. A última linha do bloco de código vai escrever para o CSV os cabeçalhos.

SSIS Python data

 

O próximo bloco de código vai criar um loop com um range de 11 páginas para o URL especificado.

SSIS Python data

 

Dentro desse loop, vai estar outro loop que vai procurar pela tag de HTML “Article”.

SSIS Python data

 

Esta parte exige algum conhecimento de HTML porque é necessário ver o código da página e procurar pela informação que se quer dentro dos tags de HTML e especificar no código quais as tags que queremos.

Neste caso, vamos ver primeiro dentro da tag Article:

SSIS Python data

 

Depois, especificamos que queremos a tag H2 para a nossa coluna Headline:

SSIS Python data

 

A tag p para o Summary:

SSIS Python data

 

E o src da tag picture:

SSIS Python data

 

Finalmente, escrevemos os dados para o ficheiro CSV:

SSIS Python data

 

Agora que o script está completo, salva-se como um ficheiro de extensão .py. Antes de criar o projeto SSIS, é necessário criar um ficheiro batch que vai correr o script. Para isto, abre-se um ficheiro de texto e escreve-se o seguinte:

@echo off
python C:\Users \Desktop\scrapper3.py %*

E salva-se o ficheiro com a extensão .bat.

Agora cria-se uma tabela com as mesmas colunas do CSV e um projeto SSIS para carregar os dados para essa tabela.

No projeto de SSIS cria-se um Execute Process Task:

SSIS Python data

 

E no menu de Process, aponta-se para o ficheiro .bat criado.

SSIS Python data

 

Adiciona-se um Data flow task e abre-se o menu de data flow. No menu de data flow, adiciona-se um Flat File Source task e cria-se uma nova ligação para o ficheiro de CSV com os dados “raspados”.

Neste caso, também foi necessário criar uma task de Data Conversion para converter texto non-unicode em unicode e um Derived Column task para adicionar a data de inserção de cada row.

SSIS Python data

 

Finalmente, adicionamos um OLE DB Source task que aponta para a tabela criada onde se vai carregar os dados “raspados”.

SSIS Python data

 

Manda-se executar o projeto de SSIS:

SSIS Python data

 

SSIS Python data

 

E verificamos a tabela:

SSIS Python data

 

Conclusão

Apesar de existirem diferentes formas de atingir uma solução para “raspar” informação, este método simples demonstra as possibilidades de usar Python e SSIS no cenário em que é necessário este tipo de funcionalidade, evitando-se assim adquirir software para fazer data scraping.

SSIS Python data