Olá, pessoal!
Recentemente, tentei carregar a página da Wikipédia com a lista de países por população usando:
import pandas as pd
paises_populacao_html = pd.read_html('https://pt.wikipedia.org/wiki/Lista_de_pa%C3%ADses_por_popula%C3%A7%C3%A3o')
E recebi o erro:
HTTPError: HTTP Error 403: Forbidden
Pesquisando descobri devido ao servidor bloquear requisições que não parecem vir de um navegador. Ou seja, o pandas não envia um User-Agent por padrão, e o site interpreta a requisição como suspeita.
Para contornar, existem duas estratégias:
Salvar a página e usar um link raw (como do GitHub):
paises_populacao_html = pd.read_html('https://raw.githubusercontent.com/YuriArduino/Estudos_Pandas/refs/heads/data-tests/Lista%20de%20pa%C3%ADses%20por%20popula%C3%A7%C3%A3o%20%E2%80%93%20Wikip%C3%A9dia.html')
Ou
Simular um navegador adicionando um User-Agent com requests
:
import requests
url = "https://pt.wikipedia.org/wiki/Lista_de_pa%C3%ADses_por_popula%C3%A7%C3%A3o"
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
paises_populacao_html = pd.read_html(response.text)
Com essa segunda abordagem, o servidor entende que a requisição vem de um navegador real, e você consegue ler a tabela sem precisar salvar o HTML.
Espero que essa dica ajude quem encontrou o mesmo erro!