Introdução
Com o aumento significativo da demanda por análise de dados, ocorre o aumento da necessidade de extrair informações das páginas da web de forma mais eficiente.
Web scraping, ou garimpagem na web, é uma técnica usada por empresas e pesquisadores para obter informações úteis dos sites.
Esse processo pode ser demorado quando executado manualmente, mas felizmente, discutiremos nesse artigo como você podemos executar o script Python no SQL Server para realizar esse trabalho com rapidez.
Então, se você está procurando uma maneira eficaz de capturar informações cruciais sem navegar manualmente por centenas de páginas na web, continue lendo, e assista ao vídeo!
O que é web scraping?
A raspagem da Web, também conhecida como garimpagem na Web ou extração de dados na Web, é o processo de coletar conteúdo e dados da internet com objetivo de armazenar e obter informação relevante.
Podemos executar manualmente, copiando e colando esses dados para uma planilha ou documento, pois essas páginas não disponibilizam meios para download direto dos dados, ou podemos executar automaticamente com a ajuda de um programa de software.
Existem muitos motivos pelos quais alguém necessita extrair dados de um site. Por exemplo, uma empresa pode querer rastrear informações de preços em sites concorrentes ou uma organização governamental pode querer coletar dados sobre gastos públicos.
Existem dois tipos principais de web scraping: estruturado e não estruturado.
A extração estruturada envolve a extração de dados organizados em um formato predefinido, como uma tabela de banco de dados e não estruturada envolve a extração de dados que não estão organizados em nenhum formato específico, como o texto de um artigo, ou postagem em rede social.
Por que usar Python para web scraping?
Python é uma linguagem de programação poderosa que é amplamente usada em muitos setores atualmente.
É fácil de aprender para os iniciantes e possui muitos módulos e bibliotecas gratuitas que agilizam o desenvolvimento de diversas soluções, da análise de dados ao aprendizado de máquina.
Para web scraping, o Python possui bibliotecas (como BeautifulSoup) que facilitam a análise de HTML e a extração dos dados necessários, e podemos integrá-lo no SQL Server utilizando o pacote SQL Server Machine Learning Services e armazenar os dados extraídos para análise posterior.
Configurando o ambiente Python no SQL Server
O Python não é instalado por padrão no SQL Server, acesse o vídeo do canal "Como Executar Script Python no SQL Server", lá veremos como podemos instalá-lo na instância do seu banco de dados SQL Server, e como podemos executar essa linguagem integrada ao T-SQL.
Para o web scraping, precisamos instalar novos pacotes, ou bibliotecas do Python utilizando a linha de comando no servidor em que o SQL Server está instalado.
Identifique o caminho para encontrar o aplicativo 'pip' conforme a versão do seu banco de dados, nesse artigo e no vídeo estamos utilizando o SQL Server 2019.
cd C:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERPYTHON_SERVICESScripts
Conheça um pouco mais sobre os pacotes necessários, atráves da página PyPi.org (requests, BeautifulSoup, html5lib e lxml) e execute o código abaixo para executar a instalação:
pip install requests
pip install bs4
pi install html5lib
pip install lxml
É importante entender que os pacotes podem depender de outros pacotes no momento da instalação, e está condicionado com a versão do Python instalada do SQL Server
Quando a instalação estiver concluída, abriremos uma nova janela de consulta no SQL Server Management Studio, ou no Azure Data Studio, para executar o nosso código Python.
Criando um script de Web Scraping
Antes de começarmos, vamos dar uma olhada nos dados que iremos coletar.
Estaremos copiando os dados da página macrotrends.net, onde coletaremos os valores históricos da cotação na bolsa de valores da empresa Microsoft, contendo a média anual, o valor de abertura e fechamento do ano, entre outros.
Agora que sabemos quais dados iremos coletar, vamos dar uma olhada em como criar o script:
Definimos a variável T-SQL de nome '@pscript' do tipo de dados NVARCHAR que irá receber o script Python, e começamos a importar as bibliotecas necessárias.
Também importaremos a biblioteca pandas para armazenar os dados extraídos em um DataFrame.
/* 1 Importar os módulos python */
DECLARE @pscript NVARCHAR(MAX);
SET @pscript = N'
import pandas as pd # importar para criar o dataframe
import requests # importar para consulta web
from bs4 import BeautifulSoup as bs # importar para ler html
'
Estaremos adicionando ao texto do script atual, o uso da biblioteca requests para fazer requisições HTTP, e a biblioteca BeautifulSoup para analisar a resposta HTML, definindo a URL que queremos extrair os dados.
/* 2. Obter Texto HTML BeatifulSoup */
SET @pscript = @pscript + N'
url = "https://www.macrotrends.net/stocks/charts/MSFT/microsoft/stock-price-history"
html_data = requests.get(url).text # consulta para a página de internet
beautiful_soup = bs(html_data, "html5lib") # ler e converter html em objetos
'
Depois de obter a resposta HTML, podemos extrair os dados de que precisamos usando seletores CSS ou expressões XPath.
/* 3. Obter e identificar a tabela desejada */
SET @pscript = @pscript + N'
tabelas = beautiful_soup.find_all("table")
for id, tabela in enumerate(tabelas):
if ("Historical Annual Stock Price Data" in str(tabela)):
tabela_id = id # obter o índice da tabela
'
Agora, armazenaremos os dados extraídos em um DataFrame
/* 4. Cria Dataframe */
SET @pscript = @pscript + N'
table_data = pd.DataFrame(columns=["Ticker",
"Year", "Average", "Open",
"High", "Low", "Close"])
'
/* 5. Preencher Dataframe com valores da tabela */
SET @pscript = @pscript + N'
for linha in tabelas[tabela_id].tbody.find_all("tr"):
coluna = linha.find_all("td")
if (coluna !=[]):
year = coluna[0].text
average = coluna[1].text
open = coluna[2].text
high = coluna[3].text
low = coluna[4].text
close = coluna[5].text
table_data = table_data.append(
{"Ticker": "MSFT" ,
"Year" : year,
"Average" : average,
"Open" : open,
"High" : high,
"Low" : low,
"Close" : close}, ignore_index=True)
'
Disponibilizamos o resultado do Dataframe para saída do T-SQL
/* 6. Disponibilizar o resultado */
SET @pscript = @pscript + N'
OutputDataSet = table_data
'
E por fim, o código T-SQL para executar o script Python contido na variável '@pscript'
Execute sp_execute_external_script
@language = N'Python',
@script = @pscript
WITH RESULT SETS(
("Ticker" varchar(10),
"Year" int, "Average" float, "Open" float,
"High" float, "Low" float, "Close" float)
); -- nomes das colunas
Executando Web Scraping script
Assim, com nosso script Python pronto, existem apenas mais algumas etapas para executá-lo no SQL Server. Primeiro, você precisará criar um novo banco de dados no SQL Server, caso já não tenha um disponível.
Podemos utilizar o SQL Server Management Studio, ou o Azure Data Studio para isso, executando o seguinte comando SQL:
CREATE DATABASE [WebScraping]
Com o banco de dados criado, você precisa criar uma tabela para armazenar os dados:
USE [WebScraping]
CREATE TABLE [dbo].[Stock_Price_History]
(
[id] int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
[Year] int NOT NULL,
[Average] float NOT NULL,
[Open] float NOT NULL,
[High] float NOT NULL,
[Low] float NOT NULL,
[Close] float NOT NULL
)
GO
Com a tabela criada, você está pronto para executar o script Python, mas antes de fazer isso, você precisa fazer uma alteração.
Na linha anterior do código "Execute sp_execute_external_script", adicione o seguinte comando T-SQL para inserir o resultado do script Python na tabela
INSERT INTO STOCK_PRICE_HISTORY --Inserir o resultado na tabela
Conclusão
O web scraping utilizando o script Python no SQL Server é uma ótima maneira de automatizar processos demorados, economizando tempo e aumentando produtividade.
Permitindo a coleta dos dados nas páginas de internet de forma rápida e eficiente. Inclusive, com a possibilidade de personalizar com os parâmetros de pesquisa de acordo com sua necessidade.
Além disso, ao integrar um script Python ao SQL Server, conseguimos extrair insights valiosos em grande quantidade de dados utilizando o mesmo ambiente já conhecido pelo profissional do banco de dados, tornando-se uma técnica que reduz a curva de aprendizado e melhora a eficiência dessa atividade.
📁 Arquivos disponíveis no GitHub, no repositório "sql-server-machine-learning-services" não esquece de seguir para valorizar o conteúdo:
https://www.fabioms.com.br/?url=github