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.

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”.
- 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.
- 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.


