Python Acesso à Internet usando Urllib.Request e urlopen()

⚡ Resumo Inteligente

urllib é o padrão Python Módulo para acesso a dados da internet, permitindo a abertura de programas. URLe recupera conteúdo HTML, JSON ou binário. A função urllib.request.urlopen() conecta-se a um endereço web e lê a resposta do servidor diretamente em Python.

  • 🔘 Biblioteca padrão: O urllib é enviado com Python e agrupa os módulos de solicitação, erro, análise e robotparser para URL tarefas.
  • ☑️ Abra um URL: A função urllib.request.urlopen() abre uma conexão e getcode() retorna o status HTTP, como 200.
  • Leia a resposta: O método read() retorna bytes brutos, que decode(“utf-8”) converte em texto legível.
  • 🧪 Lidar com erros: Capturar HTTPError e URLErro de urllib.error, portanto, solicitações com falha nunca travam o programa.
  • 🛠️ Baixar arquivos: A função urlretrieve() salva qualquer URL Gravação direta em disco, ideal para imagens, PDFs e conjuntos de dados.
  • 🤖 Preparado para IA: O urllib busca conjuntos de dados e dados de API que alimentam modelos de aprendizado de máquina e pipelines de IA.

Python Acesso à Internet usando Urllib

As seções abaixo explicam o que é urllib e como abrir um arquivo urllib. URL e ler seu HTML, e como lidar com erros, baixar arquivos e escolher entre a biblioteca urllib e a biblioteca requests.

O que é urllib?

urllib é um Python módulo que pode ser usado para abrir URLEle define funções e classes para auxiliar em URL ações.

Com PythonVocê também pode acessar e recuperar dados da internet, como XML, HTML e JSON, e trabalhar diretamente com esses dados. Nas seções a seguir, veremos como recuperar dados da web. Por exemplo, aqui usamos um GuruVídeo 99 URL, acesse-o usando Pythone imprima o arquivo HTML deste URL.

O pacote urllib agrupa vários módulos: urllib.request para abrir URLs, urllib.error para as exceções que as requisições podem gerar, urllib.parse para construir e analisar URLs e urllib.robotparser para leitura de arquivos robots.txt.

Como abrir URL usando Urllib

Antes de executarmos o código para conectar aos dados da internet, precisamos importar o URL módulo de biblioteca, ou “urllib”.

Abra URL usando Urllib

  • Importar URLlib
  • Defina sua função principal
  • Declare a variável webUrl
  • Em seguida, chame a função urlopen na biblioteca urllib.
  • O URL Estamos inaugurando o Guru99 tutorial sobre YouTube
  • Em seguida, imprimimos o código resultante.
  • O código de resultado é obtido chamando a função `getcode` na variável `webUrl` que criamos.
  • Convertemos isso em uma string para que possa ser concatenada com nossa string "código de resultado".
  • Este será um código HTTP padrão “200”, indicando que a solicitação HTTP foi processada com sucesso.

Como obter um arquivo HTML de um URL in Python

Você também pode ler o arquivo HTML usando a função read() em PythonAo executar o código, o arquivo HTML aparecerá no console.

Arquivo HTML de URL in Python

  • Chame a função read() na variável webUrl.
  • O método read() permite ler o conteúdo de arquivos de dados.
  • Leia todo o conteúdo do URL em uma variável chamada dados
  • Execute o código e ele imprimirá os dados em formato HTML.

Aqui está o código completo:

Python 2 Exemplo

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3 Exemplo

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

Como lidar com erros do urllib: URLErro e HTTPError

Nem sempre uma requisição é bem-sucedida. Quando algo dá errado, o urllib gera uma exceção em vez de retornar dados, por isso é importante tratar esses erros. O módulo urllib.error define duas classes principais de exceção.

  • Erro HTTP É acionada quando o servidor retorna um código de status de erro, como 404 Não Encontrado ou 500 Erro Interno do Servidor. Ela contém o código de status e o corpo da resposta.
  • URLerro É lançada quando o servidor não pode ser acessado de forma alguma, por exemplo, devido a um nome de domínio incorreto ou à falta de conexão com a internet. Ela contém um atributo de motivo que explica a falha.

Porque HTTPError é uma subclasse de URLErro: sempre capture primeiro o HTTPError para que cada tipo de erro seja tratado separadamente.

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

O tratamento dessas exceções impede que seu programa falhe e permite que você registre o problema, tente novamente a solicitação ou recorra a dados em cache.

Como baixar um arquivo de um URL Usando urllib

lendo um URL Armazenar na memória funciona para páginas pequenas, mas para imagens, documentos PDF ou conjuntos de dados, é mais fácil salvar a resposta diretamente no disco. O módulo urllib.request oferece duas maneiras simples de fazer isso.

A função urlretrieve() baixa um URL diretamente para um arquivo local em uma única linha:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

Para maior controle, abra o URL e escreva os bytes você mesmo. Abra o arquivo local em modo binário, pois urlopen() retorna bytes, não texto:

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

Para arquivos muito grandes, leia e escreva em um loop usando response.read(8192) para que o arquivo inteiro nunca seja mantido na memória de uma só vez.

urllib versus a biblioteca requests em Python

urllib faz parte do Python Biblioteca padrão, portanto funciona em qualquer lugar sem necessidade de instalação. A biblioteca de terceiros requests não está integrada, mas muitos desenvolvedores a preferem para o trabalho HTTP do dia a dia porque sua sintaxe é mais curta e legível.

As principais diferenças são:

  • Instalação: O urllib é enviado com Python, enquanto o requests precisa ser instalado com o pip.
  • Decodificação: A função `urllib` retorna bytes brutos que você decodifica manualmente, enquanto a função `requests` decodifica texto e JSON automaticamente.
  • Conveniência: O módulo requests gerencia sessões, cookies e cabeçalhos personalizados com menos código.
  • Dependências: O urllib não adiciona nada, enquanto o requests depende do urllib3 internamente.

Escolha o urllib quando você não precisar de nenhuma dependência ou quando precisar apenas de uma requisição rápida e pontual. Escolha o requests para projetos maiores que envolvam autenticação, sessões ou chamadas frequentes à API. Ambos enviam as mesmas requisições HTTP subjacentes, então a decisão se resume à conveniência versus uma lista de dependências menor.

Perguntas Frequentes

A função `urlopen()` retorna um objeto de resposta HTTP, geralmente um `http.client.HTTPResponse`. Você pode chamar `read()` para obter os bytes brutos, `getcode()` para ler o código de status e `headers` ou `info()` para inspecionar metadados como tipo de conteúdo e comprimento.

urllib2 pertencia a Python 2. em Python 3. Foi reorganizado: suas funcionalidades foram divididas em urllib.request para abertura. URLs e urllib.error para exceções. Code O código escrito para urllib2 precisa ser atualizado para importar urllib.request.

A função read() retorna bytes, não uma string, porque a função urlopen() não conhece a codificação antecipadamente. Chamar decode(“utf-8”) converte esses bytes em texto legível para que você possa imprimir, pesquisar ou analisar o conteúdo HTML ou JSON.

Abra o URL Com a função `urlopen()`, leia os bytes, decodifique-os e, em seguida, analise-os com o módulo `json`: `json.loads(response.read().decode(“utf-8”))`. Isso retorna um Python Um dicionário ou lista que você pode usar diretamente, o que é comum ao chamar APIs da web.

Enrole o URL Em um objeto `urllib.request.Request`, adicione o cabeçalho antes de abri-lo: `request.add_header(“User-Agent”, “Mozilla/5.0”)`, e então passe a requisição para `urlopen()`. Cabeçalhos personalizados são úteis quando um servidor bloqueia o cabeçalho padrão. Python agente do usuário.

Sim. O urllib pode buscar conjuntos de dados, arquivos CSV e JSON de APIs da web, que você então decodifica e carrega no pandas ou NumPy. É uma maneira leve e independente de integrar dados de treinamento a um pipeline de aprendizado de máquina.

Sim. O GitHub Copilot completa automaticamente padrões comuns do urllib, como chamadas urlopen(), objetos Request e tratamento de erros try/except. Isso agiliza a execução de código repetitivo, mas você ainda deve verificar a compatibilidade. URLO assistente de IA sugere o uso de cabeçalhos, tratamento de exceções e outras funcionalidades.

Codifique seus parâmetros com `urllib.parse.urlencode()`, converta-os em bytes com `encode()` e, em seguida, passe-os como argumento `data` para `urlopen()` ou para um objeto `Request`. Fornecer dados automaticamente faz com que o `urllib` envie uma requisição POST em vez de uma requisição GET.

Resuma esta postagem com: