Ajuda raspagem de dados

Olá, gostaria de uma ajuda. Estou tentando raspar uma tabela da Wikipedia. Estou usando Python, consegui baixar todas as tabelas, porém estão como uma lista em forma de objeto. O desafio agora é transformar esta lista em um csv de forma que eu possa pegar a tabela que quero analisar. Alguém poderia ajudar? Vou colocar as linhas de código aqui.
P.S: no começo tentei pela forma mais simples, pelo IMPORTHTML no Google Sheets, mas não deu certo, por isso tive que subir de instância e tentar com Python.

import requests
import pandas as pd
from bs4 import BeautifulSoup
req = requests.get(‘Recordes da Copa do Mundo FIFA – Wikipédia, a enciclopédia livre’)

soup = BeautifulSoup(req.text, ‘html.parser’)
tabela = soup.find_all(‘table’, attrs={‘class’: ‘wikitable sortable’})
df = pd.read_html(str(tabela))
display(df)

@Masacra , você pode ler a tabela usando apenas o Pandas. Experimente algo assim:

import pandas as pd
df = pd.read_html('https://pt.wikipedia.org/wiki/Recordes_da_Copa_do_Mundo_FIFA#Desempenho_geral_por_sele%C3%A7%C3%A3o', flavor='html5lib')
df[476]
1 Curtida

Muito obrigado, @adriano, deu super certo! Vi que você usou o comando “flavor”. Não conhecia, do que ele trata? Vi também que você identificou a tabela pelo índice. Teria como passar os caminhos para chegar lá? Mais uma vez, muito obrigado!

@Masacra, o parâmetro flavor permite escolher entre diferentes formas de interpretar (fazer o parsing) do HTML para um dataframe. A documentação oficial diz assim:

The parsing engine to use. ‘bs4’ and ‘html5lib’ are synonymous with each other, they are both there for backwards compatibility. The default of None tries to use lxml to parse and if that fails it falls back on bs4 + html5lib.
pandas.read_html — pandas 1.4.2 documentation

Quanto ao índice, reparei que a página tinha várias tabelas (com o comando len(df) você consegue ver quantas existem) e que a tabela desejada era uma das últimas, então tentei descobrir o número dela com base nestas duas informações.

3 Curtidas

Não conhecia este parâmetro. Vou pesquisar a respeito. Mais uma vez, obrigado pela ajuda.
Abraço!

1 Curtida