CodeGym /Curso Java /Python SELF PT /Coleta de dados de tabelas e listas

Coleta de dados de tabelas e listas

Python SELF PT
Nível 32 , Lição 2
Disponível

1. Extração de dados de tabelas

O que tabelas e cebolas têm em comum? Isso mesmo, camadas!

Tabelas em HTML são como um bolo de camadas, formado pelos elementos <table>, <tr> (linhas), <th> (células de cabeçalho) e <td> (células comuns). Cada um desses elementos desempenha sua função na apresentação dos dados, e para extrair informações, é preciso acessar cada camada em sequência.

Prática, prática e mais prática!

Vamos começar com a seguinte tabela HTML simples:

HTML
<table>
  <tr>
    <th>Nome</th>
    <th>Idade</th>
    <th>Cidade</th>
  </tr>
  <tr>
    <td>Alice</td>
    <td>29</td>
    <td>Moscou</td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>34</td>
    <td>São Petersburgo</td>
</table>

Passo 1: Encontrando a tabela na página

Tabelas em páginas web são definidas pelas tags HTML <table>, e os dados na tabela estão dentro das tags <tr> (linhas da tabela) e <td> (células de dados). No BeautifulSoup, o método find ajuda a localizar a primeira tabela na página, enquanto find_all obtém todas as tabelas, caso existam várias.

Python
# Procurando a primeira tabela na página
table = soup.find("table")

Para extrair uma tabela específica, você pode refinar a busca fornecendo atributos como id ou class.

Python

# Procurando uma tabela por classe
table = soup.find("table", {"class": "table-class"})

Passo 2: Extração de dados da tabela

Depois de carregar, é hora de extrair os dados. Os dados na tabela estão organizados por linhas, então faz sentido iterar sobre as linhas da tabela e extrair os dados de cada célula.

Extraindo cabeçalhos

Os cabeçalhos da tabela geralmente estão na primeira linha e são encapsulados nas tags <th>. Usando find_all, podemos coletar todos os cabeçalhos em uma lista.

Python
# Extração de cabeçalhos da primeira linha da tabela
headers = []
header_row = table.find("tr")
for th in header_row.find_all("th"):
headers.append(th.text.strip())

print("Cabeçalhos da tabela:", headers)

Extraindo linhas de dados

Para extrair todas as linhas de dados (geralmente encapsuladas nas tags <tr>, com cada célula em <td>), usamos um loop aninhado: primeiro encontramos todas as linhas <tr>, em seguida iteramos sobre as células <td> em cada linha.

Python

# Extraindo todas as linhas de dados
data = []
rows = table.find_all("tr")[1:]  # Ignorando a primeira linha com cabeçalhos

for row in rows:
row_data = []
for cell in row.find_all("td"):
row_data.append(cell.text.strip())
data.append(row_data)

print("Dados da tabela:", data)

Esse código percorre cuidadosamente as linhas da tabela e extrai o texto de cada célula. Não parece magia? Claro, todos sabemos que não há milagre sem a magia dos loops!

2. Trabalhando com listas

Listas — os irmãos mais velhos das tabelas

Na vida, existem apenas dois objetos infinitos: tabelas e listas. Listas são representadas pelos elementos <ul> (não numeradas) e <ol> (numeradas), e seus itens são <li>. Diferentemente das tabelas, listas são simples e minimalistas, tornando-as perfeitas para uma rápida e eficiente manipulação de dados!

Extraindo dados de listas

Veja o exemplo de uma lista HTML:

HTML

<ul>
  <li>Maçã</li>
  <li>Banana</li>
  <li>Uva</li>
</ul>

Agora vamos usar nosso velho e bom BeautifulSoup para extrair esses dados:

Python

html = """
<ul>
  <li>Maçã</li>
  <li>Banana</li>
  <li>Uva</li>
</ul>
"""

soup = BeautifulSoup(html, 'html.parser')

ul = soup.find('ul')
items = ul.find_all('li')

for item in items:
    print(item.get_text())

E pronto! Uma abordagem simples mas eficaz que você pode aplicar a estruturas mais complexas.

3. Exemplo de extração e processamento de dados tabulares

Para consolidar o aprendizado, vamos tentar extrair dados de um exemplo semelhante na prática, mas com uma estrutura mais complexa:

HTML

<table id="courses">
  <tr>
    <th>Curso</th>
    <th>Instrutor</th>
  </tr>
  <tr>
    <td>Python para todos</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatização com Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="technologies">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>

Para extrair dados da tabela e lista, podemos configurar as consultas deste jeito:

Python

html = """
<table id="courses">
  <tr>
    <th>Curso</th>
    <th>Instrutor</th>
  </tr>
  <tr>
    <td>Python para todos</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatização com Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="technologies">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>
"""

soup = BeautifulSoup(html, 'html.parser')

# Extraindo dados da tabela
course_table = soup.find('table', id='courses')
course_rows = course_table.find_all('tr')

for row in course_rows:
    cells = row.find_all(['th', 'td'])
    for cell in cells:
        print(cell.get_text())

print("---")

# Extraindo dados da lista
tech_list = soup.find('ul', class_='technologies')
tech_items = tech_list.find_all('li')

for item in tech_items:
    print(item.get_text())

Esse script cobre ambos os tipos de dados. Note como usamos ids e classes para buscar elementos com precisão. Na prática, você pode se deparar com estruturas HTML mais desafiadoras, mas a abordagem permanece a mesma: começamos do nível superior, desmontamos os elementos e, finalmente, extraímos os dados preciosos!

4. Resumo e erros comuns

Trabalhar com tabelas e listas em páginas web é como navegar em um labirinto. Às vezes, você pode se deparar com dados imperfeitos, como células vazias ou elementos ausentes. Nesses casos, é importante verificar se os dados estão corretos e completos. Erros comuns incluem tentar acessar elementos inexistentes ou usar seletores incorretos. Lembre-se de que o HTML nem sempre é tão limpo e estruturado quanto gostaríamos, então sempre vale a pena considerar o tratamento de exceções e a validação dos dados.

Onde isso pode ser útil?

O conhecimento adquirido nesta aula vai te ajudar a extrair e processar dados automaticamente de várias fontes online. Por exemplo, você pode automatizar a coleta de dados de tabelas do mercado de ações, configurar o monitoramento de preços em lojas online e até realizar análises regulares de dados de blogs e sites de notícias. Dominar técnicas de extração de dados de tabelas e listas abre um mundo de possibilidades para automação e análise de dados.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION