Quando o requests recebe uma resposta, ele tenta detectar o encoding dos dados. Esse encoding se refere ao código a partir dos quais os caracteres devem ser interpretados.

Os computadores começaram codificando os caracteres da maneira mais econômica possível: em 7 bits de informação, que geram 27 combinações, ou seja, 128 caracteres. Para línguas sem acentos e cedilhas, é suficiente esse repertório restrito de símbolos da tabela ASCII (American Standard Code for Information Interchange). São esses os caracteres que podem ser utilizados nos códigos em Python.

Porém, para poder conter textos com um repertório maior de caracteres, é preciso ter codificações mais ricas, inclusive aquela que é usada pelo STF e que tem se tornado padrão na internet: o UTF-8, que tem tamanhos variáveis, contendo de 1 a 4 blocos de 8 bits. Esse formato permite codificar todos os caracteres que precisamos, sendo inclusive mais rico que a codificação típica do Excel (cp-1252).

Para ler perfeitamente as informações do Acompanhamento Processual do STF, é preciso definir que os dados obtidos pelo requests.get devem usar o encoding utf-8, o que é feito pelos seguintes comandos.

resposta = requests.get(url)
resposta.encoding = 'utf-8'
campo = resposta.text

Levando em conta todas essas peculiaridades, desenvolvemos a seguinte função para a extração do código fonte da página do acompanhamento. Trata-se de uma função que constrói o URL adequado, solicita os dados do STF, define o encoding como utf-8.

def solicitar_dados_AP (classe, numero):
    url = ('http://portal.stf.jus.br/processos/listarProcessos.asp?classe=' 
           + classe 
           + '&numeroProcesso='
           + numero)
    string = requests.get(url)
    string.encoding = 'utf-8'
    htmlfonte = string.text
    htmlfonte = extrair(htmlfonte,
                        '<div class="processo-titulo m-b-8">',
                        '<div class="p-l-0" id="resumo-partes">')
    
    return (url + ">>>>> \n" + htmlfonte)