O que é a biblioteca requests do Python?
API de raspagem universal sem código pode ser chamada da biblioteca requests do Python quando um fluxo de trabalho precisa de aquisição gerenciada ou saída de página renderizada.
TL;DR
- requests é um cliente HTTP de terceiros para Python. Ele envia métodos HTTP, codifica parâmetros e corpos, lida com cookies e sessões, e expõe status de resposta, cabeçalhos, texto, bytes e JSON.
- requests não é um analisador HTML ou navegador. Ele recupera respostas do servidor, mas não consulta um DOM ou executa JavaScript do lado do cliente.
- Os timeouts devem ser explícitos em cada chamada. Um trabalhador de produção precisa de uma conexão conhecida e limite de leitura em vez de uma espera ilimitada.
- As sessões preservam cookies e reutilizam conexões. Uma sessão é útil para uma sequência relacionada de solicitações e não deve ser compartilhada entre identidades ou tarefas não relacionadas.
- A validação da resposta precisa de mais do que
raise_for_status. A página errada pode chegar com um status bem-sucedido, então verifique a URL final, o tipo de conteúdo e os marcadores de identidade.
requests é o cliente HTTP de alto nível do Python
A biblioteca requests do Python fornece uma interface concisa para enviar solicitações HTTP e ler respostas. Ela suporta métodos comuns, parâmetros de consulta, corpos em formulários e JSON, cabeçalhos, cookies, autenticação, proxies, streaming, verificação TLS, redirecionamentos e sessões. Ela é instalada separadamente da biblioteca padrão do Python.
O documentação oficial de Requests descreve a biblioteca como uma interface HTTP e lista recursos como pooling de conexões, persistência de cookies, decodificação automática, suporte a proxies, downloads em streaming e timeouts. Esses recursos resolvem questões de transporte; eles não analisam HTML específico de aplicações.
Um modelo mental útil é solicitação entra, resposta sai. Você constrói a URL alvo, método, cabeçalhos e corpo. requests os envia e retorna um Response. O código da aplicação então decide se a resposta é aceitável e se deve analisar texto, bytes ou JSON.
O que um objeto de resposta contém
Uma resposta expõe status_code, cabeçalhos, a final url, histórico de redirecionamento, decodificado text, bruto content bytes, e um json() ajudante. O quickstart do Requests também recomenda raise_for_status() quando o status HTTP não bem-sucedido deve se tornar uma exceção.
| Propriedade da resposta | Significado | Cuidado comum |
|---|---|---|
status_code | Status de resposta HTTP | Sucesso não prova identidade da página |
headers | Metadados da resposta | Tipo de conteúdo declarado ainda pode estar errado |
text | Texto de resposta decodificado | Escolha de codificação afeta caracteres |
content | Bytes de resposta brutos | Corpos grandes requerem streaming ou limites |
json() | Decodificar um corpo JSON | JSON válido pode acompanhar um status de erro |
url | URL final da resposta | Redirecionamentos podem levar a uma página não intencionada |
Chamando json() prova apenas que o corpo pode ser decodificado como JSON. Não torna uma resposta não bem-sucedida bem-sucedida. Verifique o status e o esquema da resposta esperada antes de aceitar valores.
Envie uma Solicitação Limitada
O workspace atual contém solicitações, então este padrão pode ser importado e executado. O exemplo mostra timeouts explícitos, verificação de status, inspeção de tipo de conteúdo e um marcador de identidade de página antes que qualquer parser receba o corpo.
import requests
with requests.Session() as session:
session.headers.update({
"Accept": "text/html,application/xhtml+xml",
"User-Agent": "ExampleResearchClient/1.0",
})
response = session.get(
"https://example.com/",
timeout=(10, 20),
allow_redirects=True,
)
response.raise_for_status()
content_type = response.headers.get("content-type", "")
if "text/html" not in content_type.lower():
raise ValueError("expected an HTML response")
if "Example Domain" not in response.text:
raise ValueError("expected page identity is missing")
print({
"final_url": response.url,
"status": response.status_code,
"characters": len(response.text),
})
A tupla de timeout separa o tempo de conexão do tempo máximo de espera entre bytes recebidos. Dê a cada chamada um valor explícito ligado à carga de trabalho. Um escalonador não pode gerenciar capacidade quando uma solicitação pode esperar indefinidamente.
Use Sessões para Solicitações Relacionadas
Um Session mantém cookies e configurações padrão entre solicitações e usa pooling de conexão através de seus adaptadores. É uma boa escolha para uma sequência que compartilha um estado, local e host permitidos. Deve ser fechado quando essa tarefa lógica terminar.
Não compartilhe uma sessão autenticada ou personalizada entre trabalhos não relacionados. Cookies afetam o que o servidor retorna e podem deslocar a coleção fora do escopo público pretendido. Mantenha segredos em armazenamento de ambiente ou credenciais, não em código, URLs, logs ou registros serializados.
Os padrões de sessão podem incluir cabeçalhos, autenticação, proxies e parâmetros de consulta. Valores por solicitação os substituem onde documentados. Mantenha o conjunto padrão pequeno para que o comportamento de uma solicitação permaneça óbvio durante a revisão.
Entenda a Fronteira com Parsing
requests não fornece seletores CSS ou XPath. Combine-o com BeautifulSoup, lxml, parsel ou outro parser quando a resposta for HTML. Para JSON, valide o objeto retornado diretamente contra as chaves e tipos esperados.
requests também não executa scripts de páginas. Um navegador pode exibir conteúdo que está ausente de response.text. Compare a resposta bruta com o DOM ao vivo, inspecione fontes de rede permitidas e use aquisição renderizada quando os dados exigidos existirem apenas após a execução do JavaScript.
- Verifique o status antes de decodificar dados da aplicação. Os corpos de erro podem ser HTML ou JSON válidos.
- Verifique a URL final. Um redirecionamento automático pode levar a uma página genérica de conta ou consentimento.
- Valide o tipo de conteúdo e identidade. Um cabeçalho conhecido ou chave de esquema confirma a classe da resposta.
- Limite o tamanho da resposta. Transmita downloads grandes e pare quando o corpo exceder o contrato da página aceito.
Configure Proxies Sem Vazar Credenciais
requests aceita URLs de proxy através do proxies argumento e pode ler a configuração padrão do ambiente. Trate as credenciais do proxy como chaves de API: mantenha-as fora do código-fonte, evite que apareçam em textos de exceção e não armazene URLs completamente credenciadas na saída.
O uso de proxy deve corresponder a um propósito geográfico e de acesso permitido. Um local de saída diferente pode alterar idioma, preço, estoque, requisitos de consentimento e obrigações legais. Registre a região pretendida como metadados de lote para que comparações a jusante não misturem páginas diferentes.
Escolha a Codificação do Corpo pelo Contrato do Servidor
Use params para valores de string de consulta, data para conteúdo de corpo de formulário ou bruto, json para um documento JSON e files para uploads multipart. Esses argumentos não são intercambiáveis, mesmo quando o Python aceita o mesmo dicionário. O servidor interpreta o corpo através de seu tipo de conteúdo e contrato de endpoint.
A autenticação pertence a um objeto de autenticação suportado, configuração de sessão ou cabeçalho explícito definido pelo serviço. Mantenha as credenciais fora de strings de consulta porque URLs aparecem em históricos, logs de acesso, análises e mensagens de erro. Remova cabeçalhos de autorização antes de registrar uma solicitação preparada.
Para uma API de aquisição de dados, valide ambas as camadas de sucesso: a resposta HTTP e o envelope ou esquema da API. Um status HTTP bem-sucedido pode carregar um erro de nível de aplicação, enquanto um decodificador JSON pode analisar um ou outro. Campos obrigatórios e tipos de valores esperados devem ser verificados antes que o resultado chegue a um parser HTML.
Transmita Grandes Corpos e Feche Recursos
Para uma resposta grande, configure stream=True, inspecione cabeçalhos e itere sobre partes limitadas. A resposta deve ser fechada explicitamente ou usada em um gerenciador de contexto. O streaming controla a memória local, mas a aplicação ainda precisa de um tamanho máximo de corpo aceitável e verificação de tipo de conteúdo.
Parseadores HTML geralmente constroem uma árvore completa, então o streaming do download não torna automaticamente o parsing de memória constante. Escolha um parser de streaming ou formato dividido apenas quando a fonte suportar. Mantenha o limite de aquisição alinhado com o parser e a classe de documento esperada.
Valide os Contratos HTTP e de Dados
A especificação de semântica HTTP define métodos, códigos de status e comportamento de resposta. A correção da aplicação está acima dessa camada. Uma resposta bem-sucedida deve ainda corresponder ao host pretendido, caminho final, tipo de conteúdo, identidade da página e esquema de dados.
Para fluxos de trabalho da web pública, defina o escopo autorizado antes de enviar solicitações. Revise termos e leis aplicáveis, respeite controles de acesso e use o Robots Exclusion Protocol como uma entrada legível por máquina para a política de rastreamento.
Conclusão
A biblioteca Python requests é a camada de transporte para muitos fluxos de trabalho de dados. Ela torna o HTTP conciso, fornece sessões e reutilização de conexão, expõe metadados de resposta e suporta streaming e proxies. Não analisa HTML ou executa JavaScript. O uso confiável adiciona timeouts explícitos, verificações de URL final e identidade, corpos limitados, escopo cuidadoso de sessão e um parser separado ou camada de aquisição renderizada onde necessário.
Pronto para Usar requests Com Aquisição Web Gerenciada?
Chame Scrapeless de um cliente HTTP Python familiar, valide o conteúdo retornado e passe-o para o parser e esquema que sua aplicação já utiliza.
Cadastre-se hoje e ganhe $5 em crédito grátis — sem cartão de crédito necessário.
Reivindique seu crédito de $5 →FAQ
As requests fazem parte da biblioteca padrão do Python?
Não. requests é um pacote de terceiros instalado separadamente. A biblioteca padrão do Python inclui módulos HTTP e URL de nível inferior, enquanto requests fornece uma interface de nível superior.
Qual é a diferença entre requests e BeautifulSoup?
requests obtém uma resposta HTTP, enquanto BeautifulSoup analisa HTML ou XML. Um fluxo de trabalho comum de página estática usa requests primeiro e BeautifulSoup em segundo lugar.
O Python requests pode executar JavaScript?
Não. requests recupera a resposta do servidor e não executa um navegador. Use aquisição renderizada quando scripts criarem o conteúdo da página necessário.
Por que toda chamada de requests deve definir um tempo limite?
Um tempo limite explícito dá a um trabalhador uma fronteira de rede conhecida e protege a capacidade da fila. Sem um, uma solicitação pode esperar muito mais tempo do que o esperado pelo aplicativo.
Quando uma sessão de requests deve ser usada?
Use uma sessão para solicitações relacionadas que compartilham cookies, cabeçalhos, autenticação ou um pool de conexões. Mantenha-a vinculada a uma identidade lógica e a feche depois.