Webscraping simples com pandas#
Vamos utilizar pandas para fazer o download da tabela de retornos do S&P 500 do site da macrotrends.
O output será o mesmo do segundo script que fizemos em BeautifulSoup no capítulo anterior.
import pandas as pd
# Site de onde pretendemos fazer o webscraping
url = 'https://www.macrotrends.net/2526/sp-500-historical-annual-returns'
# Código para ler as tabelas todas da página usando pandas
tables = pd.read_html(url)
# Selecionar uma tabela (no nosso caso foi a primeira tabela mas poderia não ter sido)
df = tables[0]
df
S&P 500 Index - Historical Annual Data | |||||||
---|---|---|---|---|---|---|---|
Year | Average Closing Price | Year Open | Year High | Year Low | Year Close | Annual % Change | |
0 | 2023 | 4097.82 | 3824.14 | 4425.84 | 3808.10 | 4376.86 | 14.00% |
1 | 2022 | 4097.49 | 4796.56 | 4796.56 | 3577.03 | 3839.50 | -19.44% |
2 | 2021 | 4273.41 | 3700.65 | 4793.06 | 3700.65 | 4766.18 | 26.89% |
3 | 2020 | 3217.86 | 3257.85 | 3756.07 | 2237.40 | 3756.07 | 16.26% |
4 | 2019 | 2913.36 | 2510.03 | 3240.02 | 2447.89 | 3230.78 | 28.88% |
... | ... | ... | ... | ... | ... | ... | ... |
91 | 1932 | 6.92 | 7.82 | 9.31 | 4.40 | 6.89 | -15.15% |
92 | 1931 | 13.66 | 15.85 | 18.17 | 7.72 | 8.12 | -47.07% |
93 | 1930 | 21.00 | 21.18 | 25.92 | 14.44 | 15.34 | -28.48% |
94 | 1929 | 26.19 | 24.81 | 31.86 | 17.66 | 21.45 | -11.91% |
95 | 1928 | 19.94 | 17.76 | 24.35 | 16.95 | 24.35 | 37.88% |
96 rows × 7 columns
Inicialmente o uso do pandas poderá parecer a solução para tudo, e com código mais simples, mas nem todos os valores que queremos se encontram em tabelas ou nem todos os sites são construídos correctamente e conseguimos obter as tabelas desta forma.
Dito isto, este tutorial foi uma simples e breve introdução a webscraping, havendo ainda bastante mais para explorar como a biblioteca selenium. Contudo, o que foi explicado,resolve uma parcela significativa de problemas para poderem fazer o download de dados de forma a automatizar tarefas repetitivas e/ou actualizar dados para as vossas análises.